关于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语言,很多小白的问题,还请各位不吝指教,谢谢!
...全文
265 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
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 那么回车符在哪呢?还是输入缓存里。程序运行完输入缓存清空。

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧