c语言中gets函数和是scanf函数有什么区别呢?? c语言scanf函数和gets()区别,问题如图

\u6709\u4eba\u80fd\u544a\u8bc9\u6211\u4e00\u4e0bC\u8bed\u8a00\u4e2dgets\u51fd\u6570\u548cscanf\u51fd\u6570\u7684\u533a\u522b\u5417

char *gets\uff08char *\uff09
\u4ece\u6807\u51c6\u8f93\u5165\u8bfb\u53d6\u5b57\u8282\u6d41\uff0c\u9047\u5230\u6362\u884c\u7b26\u6216\u6587\u4ef6\u7ed3\u675f\u7b26\u7ec8\u6b62\u3002
\u4f8b char a[64];
gets( a );
\u90a3\u4e48\u4f1a\u5c06\u8bfb\u5230\u7684\u5b57\u7b26\u4e32\u4fdd\u5b58\u5230a\u5b57\u7b26\u6570\u7ec4\u4e2d\uff0c\u4f7f\u7528\u7684\u65f6\u5019\u6709\u6570\u7ec4\u8d8a\u754c\u7684\u5371\u9669\uff0c\u8981\u4f7f\u63a5\u6536\u8f93\u5165\u7684\u5b57\u7b26\u6570\u7ec4\u8db3\u591f\u5927\u3002
int scanf ( Format [, Pointer, ... ])
\u6839\u636e\u7ed9\u5b9a\u7684\u683c\u5f0f\u4ece\u6807\u51c6\u8f93\u5165\u8bfb\u53d6\u6570\u636e\u3002
\u4f8b scanf( "%64s", a ); \u4ece\u6807\u51c6\u8f93\u5165\u6700\u591a\u8bfb\u53d664\u4e2a\u5b57\u7b26\u7684\u5b57\u7b26\u4e32\u653e\u5230a\u6570\u7ec4\u4e2d\u3002\u6bd4\u8f83\u5b89\u5168\u3002\u4e5f\u53ef\u4ee5\u6309\u7167\u683c\u5f0f\uff0c\u8bfb\u53d6\u6574\u6570\u3001\u6d6e\u70b9\u6570\u7b49\u7c7b\u578b\u3002

\u539f\u56e0\u51fa\u5728\u8f93\u51fa\u8bed\u53e5\u4e0a
\uff0c\u301020\u3011\u5143\u7d20\u7684\u6570\u7ec4\uff0c\u4e0b\u6807\u6700\u5927\u662f19
\u8f93\u51fa\u5b57\u7b26\u4e32\u53ea\u9700\u8981\u6570\u7ec4\u540d\u6216\u8005\u9996\u5730\u5740\u5373\u53ef\u3002
\u4ed6\u4eec\u7684\u533a\u522b\u662f
scanf\u4ee5\u7a7a\u683c\u7ed3\u675f\u8f93\u5165\u3002gets\u4ee5\u56de\u8f66\u7ed3\u675f\u8f93\u5165

一、指代不同

1、scanf:是C语言中的一个输入函数。

2、gets:从标准输入设备读字符串函数。

二、读取方式不同

1、scanf:是格式输入函数,即按用户指定的格式从键盘上把数据输入到指定的变量之中。

2、gets:可以无限读取,不会判断上限,以回车结束读取,所以程序员应该确保buffer的空间足够大,以便在执行读操作时不发生溢出。


三、数据流向不同

1、scanf:函数 scanf() 是从标准输入流stdin  (标准输入设备,指向键盘)中读内容的通用子程序,可以说明的格式读入多个字符,并保存在对应地址的变量中。

2、gets:从stdin流中读取字符串,直至接受到换行符或EOF时停止,并将读取的结果存放在buffer指针所指向的字符数组中。换行符不作为读取串的内容,读取的换行符被转换为‘\0’空字符,并由此来结束字符串。


参考资料来源:百度百科-gets

参考资料来源:百度百科-scanf



都是从输入流中读取数据,但功能有很大差别:
1 操作类型不同。
gets函数仅用于读入字符串。
scanf为格式化输出函数,可以读入任意C语言基础类型的变量值,而不是仅限于字符串(char*)类型。

2 截止字符不同。
gets函数固定的以换行符作为结尾,遇到换行符时结束输入。

scanf函数默认以空白函数结尾,同时可以对截止函数进行修改。

3 对截止字符处理不同。
gets函数会读入截止字符\n, 同时将\n自动替换为\0.
scanf遇到截止字符时不会继续读取,截止字符将存储于输入缓冲中。

4 返回值类型不同。
gets的返回值为char*型,当读入成功时会返回输入的字符串指针地址,出错时返回NULL。
scanf返回值为int型,返回实际成功赋值的变量个数,当遇到文件结尾标识时返回EOF。

gets函数和scanf函数都可以作为字符串的输入函数,
相同点:都是将从键盘输入的字符串存入数组中,输入完成后要以回车来结束输入。
不同点:利用sanf时,在输入过程中碰到空格时系统认为输入结束,并将空格之前的字符作为有效字符存入数组中,并在尾部追加\0作为结束标志。利用gets时,空格符被看作是有效字符,也就是说只有碰到回车符时系统才认为输入结束。

是不是这代码前面还有什么输入语句,反正在我电脑上运行结果一样.
gets与scanf的区别是gets一次读一行,scanf遇到空格回车结束!

gets()函数的话会连zhanghao后面的回车也当做字符输入了,对比的话肯定就是跟zhanghao不一样;

  • 缂栧啓绋嬪簭,杈撳叆涓涓互鍥炶溅绗︾粨鏉熺殑瀛楃涓(灏戜簬 80涓瓧绗),灏嗚瀛楃涓...
    绛旓細浣跨敤gets()鍑芥暟杈撳叆瀛楃涓诧紝璇ュ瓧绗︿覆浠ュ洖杞︾浣滀负缁撴潫鏍囪銆傝幏寰楀瓧绗︿覆鐨闀垮害锛屼互璇ラ暱搴﹀-1浣滀负璧风偣锛屼互0浣滀负缁堢偣锛屽惊鐜緭鍑哄瓧绗︺傛敞鎰忥細鑾峰緱瀛楃涓查暱搴﹀彲浠ョ敤<string.h>搴撶殑strlen()鍑芥暟锛岃鍑芥暟杩斿洖瀛楃涓茬殑瀹為檯闀垮害锛屽叾涓笉鍖呭惈绌哄瓧绗︺傛祴璇曚唬鐮 娴嬭瘯浠g爜锛歩nclude <stdio.h> include <string.h> i...
  • C璇█鎬庝箞杈撳嚭txt鏂囦欢鍐呯浉鍚屽鍚,涓嶅悓瀛﹀彿鐨勫鐢?
    绛旓細include <string.h> include <stdlib.h> int main(void){ printf("杈撳叆瀛︾敓鐨淇℃伅,鍒嗗埆鏄彮绾,濮撳悕,瀛﹀彿:");FILE * student = fopen( "student.txt","wb+");if( student == NULL ){ printf("鏂囦欢鎵撳紑澶辫触!");system("pause");return 0;} char a[100] ;gets(a);fwrite( a,(strlen...
  • C璇█銆婄粷瀵圭礌鏁般
    绛旓細//杩欎釜绋嬪簭鍜屾眰缁濆绱犳暟鏈夊叧绯诲悧锛熷張鏄帓搴忥紝鍙堟槸merger鐨锛屾病鐪嬪嚭鍜岄鐩湁浠涔堝叧绯 銆//涓嬮潰鐨勭▼搴忔槸 鎴戞寜瑕佹眰鍐欑殑銆俰nclude<stdio.h> int prime(int n){ int i;for(i=2;i<n;i++){ if(n%i == 0)return 0;} return 1;} int inv(int n){ int re=0;while(n!=0){ re = re...
  • 本站交流只代表网友个人观点,与本站立场无关
    欢迎反馈与建议,请联系电邮
    2024© 车视网