【发布时间】:2019-04-05 15:27:52
【问题描述】:
我想在 for 循环的控制下,在同一行上一次打印一个单独的点(点、“.”):
for (i=0; i<100; i++)
{
printf(".");
sleep(1);
}
printf("\n");
但是输出只在最后的“\n”之后才进入屏幕,我希望每一个在打印后立即显示,以作为进度指示器。我预计在每次循环迭代中fflush()ing 标准输出会产生该结果,但这不起作用(结果仅在执行 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 交叉编译)上测试。
【问题讨论】:
-
试试
sleep(1); fflush(stdout);-->fflush(stdout);sleep(1);如果这没有帮助,我怀疑你的编译器不兼容。 -
你为什么要强调随机词?
-
“已测试”和“已测试”有什么区别?
-
@chux 我认为它不是编译器,而是 IDE 控制台。 Eclipse 多年来一直存在这些问题。
-
添加@EugeneSh。恕我直言,IDE 尝试通过仅管理行而不是字符来优化其控制台输出。