C++程序,控制台/终端输出。如何实现"updating text"

C++ Program, Console/Terminal Output. How to implement "updating text"

本文关键字:实现 updating 何实现 text 控制台 程序 终端 输出 C++      更新时间:2023-10-16

我正在写一个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。)

r代替nstd::endl。不同之处在于,如果没有新行,后者将光标返回到起始行。

免责声明(根据Lightness的反对意见):这并不一定是可移植的,所以YMMV.