关于getchar()输入的问题

qq_36177617 2017-12-06 11:48:57
#include <stdio.h>
int main(void)
{
char c;
for (; (c = getchar()) != 'a';)
printf("%c", c);

c = getchar();
printf("%c",c);
return 0;
}

如上代码,请教各位大神,为什么输入sssa(回车)时,
打印出的值是 sss
光标处;
而输入sssas(回车)时,
打印出的值是ssss 光标处。为何不是sss
s;

初自自学C语言,很多小白的问题,还请各位不吝指教,谢谢!
...全文
207 4 点赞 打赏 收藏 举报
写回复
4 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
qq_36177617 2017-12-06
因为输入sssa时,遇到了最后的a则不再打印,此时'a'已经存在了for循环的c里,因此会打印sss 后面c = getchar();接收到的是换行符'\n',因此换行符会将最后的'a'覆盖了。因此最后打出c是换行。 ___________________________________________________________________________________ 这个我明白呢,我的意思是sssas时,换行符为什么没有了,直接显示的是ssss,而不是sss换行s。
  • 打赏
  • 举报
回复
自信男孩 2017-12-06
因为输入sssa时,遇到了最后的a则不再打印,此时'a'已经存在了for循环的c里,因此会打印sss 后面c = getchar();接收到的是换行符'\n',因此换行符会将最后的'a'覆盖了。因此最后打出c是换行。
  • 打赏
  • 举报
回复
羽飞 2017-12-06
楼主,换行是自己敲得吗,为啥没有回车?你的环境好神奇。 就像你的代码写的,sssa,中的a肯定不会打印出来,因为for循环结束的时候,c是‘a’ sssas的时候,for循环结束,c还是'a',后面又输入了一个's'
  • 打赏
  • 举报
回复
自信男孩 2017-12-06
引用 3 楼 qq_36177617 的回复:
因为输入sssa时,遇到了最后的a则不再打印,此时'a'已经存在了for循环的c里,因此会打印sss 后面c = getchar();接收到的是换行符'\n',因此换行符会将最后的'a'覆盖了。因此最后打出c是换行。 ___________________________________________________________________________________ 这个我明白呢,我的意思是sssas时,换行符为什么没有了,直接显示的是ssss,而不是sss换行s。
因为'a'后面的s是被第二个getchar()接收了赋值给c,因此第二个getchar();后输出的还是s 那么回车符在哪呢?还是输入缓存里。程序运行完输入缓存清空。
  • 打赏
  • 举报
回复
相关推荐
发帖
C语言
加入

6.5w+

社区成员

C语言相关问题讨论
申请成为版主
帖子事件
创建了帖子
2017-12-06 11:48
社区公告
暂无公告