【问题标题】:How to use ffllush(stdout) in c? [duplicate]如何在 c 中使用 fflush(stdout)? [复制]
【发布时间】:2021-07-22 12:53:38
【问题描述】:

我知道fflush(stdin) 根据标准这是未定义的行为。但是对于stdout,就没有这个限制了。我google了一下,得到了使用stdout作为fflush的参数的概念,但是我没弄明白。

有人可以用一个简单的例子详细说明以stdout 为参数的fflush 函数吗?

【问题讨论】:

    标签: c fflush


    【解决方案1】:

    打印时(例如printf),输出会被放入缓冲区,并且在显示换行符之前可能不会写入控制台。为确保缓冲区中的所有内容都写入控制台,可以使用fflush(stdout)

    一个例子是显示某个进程的进度:

       for(int i = 0; i < 100; i++)
       {
           <...calculation...>
           printf("."); // Print a dot after each iteration to show progress
           fflush(stdout);   // The dot may be buffered. This ensures that it is displayed immediately
       }
    

    【讨论】:

    • 对不起,我没有真正理解这个例子,printf 会不会像打印其他东西一样立即打印点?我在这里看不到 fflush 的意义。
    • @blake 不一定。据我所知,这种行为不是标准化的,但stdout 被行缓冲以将输出插入缓冲区并且在遇到换行符之前不写入屏幕的情况并不少见。因此,printf(".") 是否导致立即打印一个点取决于系统。刷新stdout 以可能的性能损失为代价确保一致的行为。
    • 嗯,有道理,谢谢回复。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-10
    • 2011-11-14
    • 2014-05-19
    • 1970-01-01
    • 2021-10-14
    相关资源
    最近更新 更多