C语言中gets和scanf的区别?

2024-12-28 21:30:04
推荐回答(5个)
回答1:

char s[1024];// 假设输入123 abc 123gets(s); // 可以读取一行scanf("%s",s); // 只能读取123,空格后的abc 123都不会被读进来

回答2:

原因出在输出语句上
,【20】元素的数组,下标最大是19
输出字符串只需要数组名或者首地址即可。
他们的区别是
scanf以空格结束输入。gets以回车结束输入

回答3:

scanf()语句不允许在输入中存在空白字符(也就是在scanf()语句中不能打空格。)
给你举个例子吧:
当用scanf()接收字符串时,键入“Pan Wei Bo”后,只有“Pan”会被存储在内存中,而空格字符后的其他剩余字符将被丢弃。为了克服这个问题就要使用gets()函数,来用于输入字符串。
总之概为1句话:scanf()用于接收字符,而gets()用于接收字符串

回答4:

char *gets(char *)
从标准输入读取字节流,遇到换行符或文件结束符终止。
例 char a[64];
gets( a );
那么会将读到的字符串保存到a字符数组中,使用的时候有数组越界的危险,要使接收输入的字符数组足够大。
int scanf ( Format [, Pointer, ... ])
根据给定的格式从标准输入读取数据。
例 scanf( "%64s", a ); 从标准输入最多读取64个字符的字符串放到a数组中。比较安全。也可以按照格式,读取整数、浮点数等类型。

回答5:

gets会将输入回车前所有输入的内容取出来,存放到一个字符数组,包括空格/tab,无论这些内容被空格/tab分成了几段,gets都会将这行输入完完整整的放到数组中,通俗点说就是gets会取一行,读到换行为止。
scanf是格式化输入,如果只使用最简单的格式化字符串%s,那么scanf只会取一个单词,在输入流中遇到空格/tab/换行,就会结束。比如输入流中有"aa bb cc"的话,那么执行scanf("%s", s),s的值就会是aa,再次执行这句话,s的值就是bb,第三次就是cc。scanf会从输入流中取多少怎么取,取决于格式化字符串,也就是scanf的第一个参数;而gets则肯定会取出完整的一行。也就是说在scanf中,换行符等同于空格/tab,但gets中,换行符为读取结束标志。
还有就是gets取出来的肯定是字符串,如果需要转其他类型,则需程序中手动判断;而sacnf就不一定了。