我正在编写一个运行长数据分析算法的C ++程序。它需要几天的时间才能完成运行,因此每次启动程序中的新循环时,都有一条提示输出“完成百分比”的提示很有用,以便用户(我)知道计算机不在无限循环中某处或坠毁。
目前,我正在以最基本的方式执行此操作,方法是将完成百分比计算为浮点数并执行以下操作:
std::cout << "Percentage complete: " << percentage_complete << " %" << std::endl;
但是,当程序要运行一百万个循环时,这很麻烦。另外,如果终端回滚只有1000行,那么一旦程序完成0.1%,我将丢失开始时打印的初始调试信息。
我想复制一个我在其他程序中看到的想法,在这里,我不用每次用新的百分比完成都写新行,而只是用新的百分比完成替换写到终端的最后一行。
我怎样才能做到这一点?那可能吗?如果是这样,是否可以跨平台方式完成?有几种方法可以做到这一点?
我不确定如何完美地描述我正在尝试做的事情,因此我希望这一点足够清楚,以便您理解我正在尝试做的事情。
要澄清,而不是看到此:
Running program.
Debug info:
Total number of loops: 1000000
Percentage complete: 0 %
Percentage complete: 0.001 %
Percentage complete: 0.002 %
.
.
.
Percentage complete: 1.835 %
我想看这个:
Running program.
Debug info:
Total number of loops: 1000000
Percentage complete: 1.835 %
然后在下一个循环中,终端应更新为:
Running program.
Debug info:
Total number of loops: 1000000
Percentage complete: 1.836 %
我希望有足够的信息。
(好的,因此此输出实际上是100000步,而不是1000000。)
最佳答案
代替\n
或std::endl
,使用\r
。不同之处在于,如果没有新行的行,后者将光标返回到开头。
免责声明(根据Lightness的反对意见):这不一定是可移植的,因此YMMV。