【发布时间】:2012-10-25 13:50:15
【问题描述】:
我最近用 C++ 实现了一个进度条类。我写了类似的东西
cout << "\r" << percentage_done << "%" << flush;
现在我正在运行一些程序,将输出输出到 less。 问题是 less 向我展示了很多类型的行
^M1%^M2%...
所以“\r”没有被正确解释。是否有可能以这种方式进行管道传输 less 只会显示最后的 100% 行,还是我必须在我的程序中添加一个开关 完全禁用进度条?
当我将输出直接传输到文件时,我遇到了同样的问题,所以输出文件 不必要地占用大量磁盘空间。
【问题讨论】:
-
可以选择关闭花哨的基于文本的 GUI 是惯用的。另外,最好使用 libncurses 进行统一终端访问。
-
一切都按设计进行。如果终端连接到标准输出,您应该只显示进度条。
-
"\r"在大多数系统上映射到^M- 回车,或返回行首而不前进到下一行(不同于"\n",换行,这意味着要么移动到开头下一行或向下移动一行而不更改列);所以你得到了你想要的。正如其他人所提到的,如果cout不是终端,您可能需要使用不同的格式。