首页 > 解决方案 > 缓冲区刷新不适用于 printf 功能

问题描述

来自这里:https ://stackoverflow.com/a/1716621/1461017

for我想在循环的控制下在同一行上一次打印一个单独的点(点,“。”) :

for (i=0; i<100; i++)
{
    printf(".");
    sleep(1);
}
printf("\n");

但是输出只在最后的“\n”之后才进入屏幕,我希望每一个在打印时立即显示,以作为进度指示器。我希望fflush()在每次循环迭代中使用标准输出会产生该结果,但这不起作用(结果仅在执行 for 循环后显示在屏幕上):

for (i=0; i<100; i++)
{
    printf(".");
    sleep(1);
    fflush(stdout);
}
printf("\n");

我还测试了所有这些方法,无论是在循环内还是在循环外,都没有成功:

fflush(stdout);
fflush(NULL);
setbuf(stdout,NULL);

这是怎么回事,我该如何解决?

更多数据:

标签: cfflush

解决方案


嗯......一个愚蠢的问题,但我想我还是应该写下来,因为有人也可以拥有它:

问题是:在命令行测试中,我添加了一些| more以阻止屏幕转储。所以stdout缓冲区被管道|命令改变了。

假设我的程序二进制文件名为dotting. 我通过键入以下内容来调用它:

dotting | more

我希望这个荒谬的案例可以在未来帮助任何人。


推荐阅读