我正在编写一个运行长数据分析算法的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。)

最佳答案

代替\nstd::endl,使用\r。不同之处在于,如果没有新行的行,后者将光标返回到开头。

免责声明(根据Lightness的反对意见):这不一定是可移植的,因此YMMV。

08-26 03:52
查看更多