printf 与stdout行缓冲问题求解

jia_jianlei 2014-07-04 08:11:18
int main(int argc, const char *argv[])
{
printf("dd>");
while(1);
return 0;
}
如上代码由于有输出缓冲的问题一直不会有输出。

int main(int argc, const char *argv[])
{
printf("dd>");
getchar();
while(1);
return 0;
}
加一个输入就会输出了,用fgetc,fgets也会使dd>输出。为会stdin的函数会影响stdout?
下面用没有缓冲的函数dd>就不输出了,这又是为什么啊?

linux@ubuntu:~/myPractice/network/server$ cat -n hh.c
1 #include <stdio.h>
2 #include <unistd.h>
3
4 int main(int argc, const char *argv[])
5 {
6 char buff[10];
7
8 printf("dd>");
9 read(STDIN_FILENO,buff,1);
10 write(STDOUT_FILENO,buff,1);
11 //fgets(buff, 10, stdin);
12 //fgetc(stdin);
13 while(1);
14 return 0;
15 }
linux@ubuntu:~/myPractice/network/server$ gcc hh.c
linux@ubuntu:~/myPractice/network/server$ ./a.out
jklkkk
j

...全文
123 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
jia_jianlei 2014-07-05
  • 打赏
  • 举报
回复
引用 5 楼 mujiok2003 的回复:
这个问题和你的一样,看看吧。
看来标准没有规定,就看所用的编译器了。
引用 1 楼 taodm 的回复:
1,第一段代码,完全可能是有正常输出的。如果谁跟你说的有缓冲区就不输出了,去吐他一脸去 2,C++才规定了stdin的时候默认一定要去先刷新stdout,标准的规定。C99有没有在C++标准出来后跟进这个规定,自己去查标准。 3,自己多找几个编译器来试。
用turbo c用printf("dd>");while(1); 是有输出的。gcc就没有了。 感谢^_^
mujiok2003 2014-07-05
  • 打赏
  • 举报
回复
这个问题和你的一样,看看吧。
mujiok2003 2014-07-05
  • 打赏
  • 举报
回复
引用 3 楼 colddown 的回复:
逻辑上stdin前先刷stdout是合理的,用户得看到输出提示才能知道输入什么
在stdin, stdout指向同一个终端时,是的。 如果有重定向, 则没有必要。
colddown 2014-07-04
  • 打赏
  • 举报
回复
逻辑上stdin前先刷stdout是合理的,用户得看到输出提示才能知道输入什么
taodm 2014-07-04
  • 打赏
  • 举报
回复
4,这是一个没有实际用途的话题,别在上面浪费太多生命。
taodm 2014-07-04
  • 打赏
  • 举报
回复
1,第一段代码,完全可能是有正常输出的。如果谁跟你说的有缓冲区就不输出了,去吐他一脸去 2,C++才规定了stdin的时候默认一定要去先刷新stdout,标准的规定。C99有没有在C++标准出来后跟进这个规定,自己去查标准。 3,自己多找几个编译器来试。

69,382

社区成员

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

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