我有这样的代码:
printf("Starting nets allocation...");
while(...)
{
...some operations...
}
puts("DONE");
代码应立即打印字符串“Starting nets allocation...”,然后在循环之后打印“DONE”。
相反,程序首先执行循环,然后打印字符串“Starting nets allocation...DONE”为什么会发生?我该如何解决这个问题?
我有这样的代码:
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");
请注意,您还可以使用setbuf
stdio.h 中的函数在文件指针级别控制缓冲:
setbuf(stdout, NULL);
to的第二个参数setbuf
是调用者提供的缓冲区,用于缓冲输出到流。传递 NULL 表示要禁用缓冲,等效于:
setvbuf(stdout, NULL, _IONBF, 0);
这也会禁用对指定流的缓冲。
请参阅setbuf
此处的文档。
输出到stdout
被缓冲,所以添加
fflush(stdout);
在printf
调用刷新内容之后。通常添加换行符也会刷新缓冲区,但在您的情况下可能不希望这样做。