Coming from here: 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);
这是怎么回事,我该如何解决?
更多数据:
- Ubuntu Linux v16 作为操作系统。
- Code::Blocks 作为 IDE。
- 只有在 Bash 命令行 上运行时才会出现问题。在 IDE 中工作正常。
- 在 Ubuntu Linux(与运行 IDE 相同)和 FreeBSD(通过 clang 交叉编译)上测试。
最佳答案
嗯...一个愚蠢的问题,但我想我还是应该把它写下来,因为有人也可能有它:
问题是:在命令行测试中,我附加一些|更多
以停止屏幕转储。所以 stdout
缓冲区被管道 |
命令改变了。
假设我的程序二进制文件被命名为dotting
。我通过键入来调用它:
dotting | more
我希望这个荒谬的案例能对 future 的任何人有所帮助。
关于c - 缓冲区刷新不适用于 printf 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55538822/