用循环让scanf函数输入字符串的问题

sosolittle 2015-05-15 04:07:23
各位大神,小弟请教一个问题,代码如下:
1 #include<stdio.h>
2 #include<unistd.h>
3 int main()
4 {
5 char ch;
7 printf("请输入一些列字符:");
8 while(1)
9 {
10 scanf("%c",&ch);
11 if(ch=='\n')
12 break;
13 printf("%c",ch);
15 sleep(3);
16 }
19 return 0;
20 }
在linux下运行,现在假如输入abcd,程序会等待12秒后,直接输出abcd;输出abcd时字母之间没有停顿3秒。。
如果将第13行printf函数中加一个'\n',
即将第13行改为printf("%c\n",ch)后,程序会先输出a,换行然后等待3秒输出b,换行再等3秒输出c,换行等3秒输出d。
请问一下大神为什么有这种区别?麻烦帮忙解决一下我的疑问,先谢谢各位大神了。
...全文
584 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
brookmill 2015-05-16
  • 打赏
  • 举报
回复
刚才忘了,还有一种情况,就是程序结束的时候,缓冲区里的内容也会输出。 试试这个: printf("123"); sleep(3); printf("abc\n"); 如果改成"123\n",或者在sleep之前加上fflush(stdout),运行结果就会有变化。
brookmill 2015-05-16
  • 打赏
  • 举报
回复
printf的输出是有缓冲的。printf的第一步把要输出的内容放到一个缓冲区里,第二步才是真正输出。 两种情况下缓冲区里的内容会被输出:一个是遇到\n,另一个是强制flush 13 printf("%c",ch); fflush(stdout); /* 加上这行试试 */ 15 sleep(3);

70,020

社区成员

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

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