首页 文章

“printf”不立即打印字符串[重复]

提问于
浏览
2

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

我有这样的代码:

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

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

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

2 回答

  • 3

    默认情况下输出流 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 here的文档 .

  • 8

    输出到 stdout 是缓冲的,所以添加

    fflush(stdout);
    

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

相关问题