我有这样的代码:
printf("Starting nets allocation...");
while(...)
{
...some operations...
}
puts("DONE");
Run Code Online (Sandbox Code Playgroud)
代码应该立即打印字符串"Starting nets allocation ..."然后,在循环之后,应该打印"DONE".
相反,程序首先执行循环,然后打印字符串"Starting nets allocation ... DONE"为什么会发生?我该如何解决这个问题?
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 此处的文档.
| 归档时间: |
|
| 查看次数: |
6106 次 |
| 最近记录: |