“printf”不立即打印字符串

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

我有这样的代码:

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

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

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

输出流stdout默认是缓冲的,所以如果你想立即输出你需要刷新输出流 – 使用fflush – 或者在printf打印换行符:

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

要么:

 printf("Starting nets allocation...\n"); 

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

 setbuf(stdout, NULL); 

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

 setvbuf(stdout, NULL, _IONBF, 0); 

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

请在此处查看setbuf文档。

stdout是缓冲的,所以添加

 fflush(stdout); 

printf调用flush内容之后。 通常添加换行符也会刷新缓冲区,但在您的情况下可能并不理想。