"printf"不会立即打印字符串

And*_*lla 3 c printf

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

我有这样的代码:

printf("Starting nets allocation...");
while(...)
{
    ...some operations...
}
puts("DONE");
Run Code Online (Sandbox Code Playgroud)

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

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

pb2*_*b2q 9

stdout默认情况下,输出流是缓冲的,因此如果您想立即输出,则需要刷新输出流 - 使用fflush- 或者在以下位置打印换行符printf:

printf("Starting nets allocation...");
fflush(stdout);    
Run Code Online (Sandbox Code Playgroud)

要么:

printf("Starting nets allocation...\n");
Run Code Online (Sandbox Code Playgroud)

请注意,您还可以使用setbufstdio.h中的函数控制文件指针级别的缓冲:

setbuf(stdout, NULL);
Run Code Online (Sandbox Code Playgroud)

第二个参数setbuf是调用者提供的缓冲区,用于缓冲输出到流.传递NULL表示要禁用缓冲,并且等效于:

setvbuf(stdout, NULL, _IONBF, 0);
Run Code Online (Sandbox Code Playgroud)

它还禁用指定流上的缓冲.

请参阅setbuf 此处的文档.