“printf”不会立即打印字符串

时间:2012-08-27 20:35:21

标签: c printf

  

可能重复:
  Why does printf not flush after the call unless a newline is in the format string? (in C)

我有这样的代码:

printf("Starting nets allocation...");
while(...)
{
    ...some operations...
}
puts("DONE");

代码应该立即打印字符串“Starting nets allocation ...”然后,在循环之后,应该打印“DONE”。

相反,程序首先执行循环,然后打印字符串“Starting nets allocation ... DONE” 为什么会这样?我该如何解决这个问题?

2 个答案:

答案 0 :(得分:8)

默认情况下缓存输出流stdout,因此如果您想立即输出,则需要使用fflush刷新输出流 - 或者在{{中打印换行符1}}:

printf

或者:

printf("Starting nets allocation...");
fflush(stdout);    

请注意,您还可以使用stdio.h中的printf("Starting nets allocation...\n"); 函数控制文件指针级别的缓冲:

setbuf

setbuf(stdout, NULL); 的第二个参数是调用者提供的缓冲区,用于缓冲输出到流。传递NULL表示将禁用缓冲,并且相当于:

setbuf

还会禁用指定流上的缓冲。

查看setvbuf(stdout, NULL, _IONBF, 0); here的文档。

答案 1 :(得分:3)

stdout的输出已缓冲,因此添加

fflush(stdout); 
printf调用flush内容之后

。通常添加换行符也会刷新缓冲区,但在您的情况下这可能并不理想。