c语言scanf gets问题

#include <stdio.h>
void main()
{
char s1[6],s2[6],s3[6],s4[6];
scanf("%s%s",s1,s2);
gets(s3);
gets(s4);
puts(s1);puts(s2);puts(s3);puts(s4);
}输入
aaa bbb
ccc ddd
输出的是
aaa
bbb
ccc ddd为什么会这样?是不是scanf遇到空格会停止,gets是把空格也当字符进行输入?还有puts是输完后自动换行吗?

scanf的%s格式接收字符串时,以空格或回车作为终止符。
而gets只以回车作为终止符。
你这里s1==aaa s2==bbb s3=ccc ddd所以输出会这样
puts输完最后输出'\n',就是换行
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-08-05
scanf函数输入字符串时存在一个问题,就是如果输入了空格会认为字符串结束,空格后的字符将作为下一个输入项处理,但gets()函数将接收输入的整个字符串直到遇到回车为止。
scanf gets
多个 单个
地址连续 地址可能不连续
\n结尾 \n结尾
输入3个字符需4字节 输入3个字符需≥6字节
特殊代码 %s 特殊代码 %s
对于输入字符串或整数不够精密 对于输入字符或整数不够精密
第2个回答  2011-08-05
gets是以'\n'作为结束符的,并且是以行位单位接收。并且puts输出时会自动在末尾加入'\n'。
在输入完aaa bbb后回车,分别存到s1、s2中,这时s3接收的是这个回车,s4接收的就是ccc ddd,所以输出应该是
aaa
bbb

ccc ddd
第3个回答  2011-08-05
scanf遇空格确实停止了,所以输入才能分别保存在s1,和s2。

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网