2

可能重复:
为什么 printf 在调用后不刷新,除非换行符在格式字符串中?

我试图在论坛上回答一些问题,我遇到了很有趣的事情。这是代码:

int main()
{
 int print_val = -1;

 while(1)
 {
  printf("%d \n", ++print_val);
  sleep(1);
 }
}

这很完美。现在乐趣进入了..只需将第 7 行更改为 printf("%d ", ++print_val);(只需删除换行符!)

现在没有输出..!

那么谁能帮我理解 sleep() 函数的行为..?我认为有必要查看 sleep() 而不是 printf(),因为我尝试用 fprintf() 和 putc() 替换它,得到相同的输出。

我已经在 32 位 Ubuntu 以及虚拟机中的 32 位 Ubuntu 上尝试过此代码。

谢谢装饰

4

1 回答 1

6

我觉得问题在于刷新输出缓冲区。如果您不将 '\n' 放在字符串的末尾,则不会刷新输出缓冲区并且 printf 不会打印任何内容。它只会在输出缓冲区已满时开始打印。请看这个问题和这个问题。

于 2012-10-31T06:45:30.763 回答