c中scanf和gets,puts混合例题的理解;

来源:互联网 发布:java字符串编码转换 编辑:程序博客网 时间:2024/06/05 22:35
c中scanf和gets,puts混合使用的理解;


例如:
void main()
{
char s1[10],s2[10],s3[10];
scanf("%s",s1);
gets(s2);
gets(s3);
puts(s1);
puts(s2);
puts(s3);
  getch();
}
如果输入是:aaa/enter/bbb/enter,会有怎样的输出?
答案是:
aaa
bbb
aaa


bbb
|


但如何理解这样的输出呢?
    其实是这样的,首先输入aaa 回车,scanf函数遇到回车自动结束接收结束,
则S1中存放aaa,之后回车操作符任然存留在键盘缓冲区,但到了get(S2),
它遇到键盘缓冲区的回车后,结束接收,并清空键盘缓冲区,之后遇到get(S3),
接收bbb,遇到回车,结束接收;
    之后的puts(s1);puts(s2);puts(s3);,S1输出aaa自带回车,S2输出为空
自带回车换行,S3输出bbb自带回车到下一行;