c - 缓冲区刷新不适用于 printf 功能
问题描述
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 交叉编译)上测试。
解决方案
嗯......一个愚蠢的问题,但我想我还是应该写下来,因为有人也可以拥有它:
问题是:在命令行测试中,我添加了一些| more
以阻止屏幕转储。所以stdout
缓冲区被管道|
命令改变了。
假设我的程序二进制文件名为dotting
. 我通过键入以下内容来调用它:
dotting | more
我希望这个荒谬的案例可以在未来帮助任何人。
推荐阅读
- python - numpy 的一维高级索引语法的正则表达式 - 如何处理可选的尾随逗号
- c# - VS2019 - ViewBag 在当前上下文中不存在
- .net-core - 查找生成器“身份”...给定的程序集名称或代码库无效
- java - 为什么 android studio 在发布时不生产启动器?
- android - listView为空时如何禁用按钮?
- api - 无法使用strapi cli生成关系表
- python-3.x - 数据流管道触发 NotImplementedError [在运行“过滤器状态 1”时]
- ios - 从嵌入在 tableView 中的 collectionView 显示 xib
- mips - MIPS,如何在指令的立即字段中找到十进制值
- mysql - SQL查询,从具有不同ID的列中检索多个值