gpt4 book ai didi

c - 缓冲区刷新不适用于 printf 函数

转载 作者:太空宇宙 更新时间:2023-11-04 04:12:40 25 4
gpt4 key购买 nike

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com