C++程序,控制台/终端输出。如何实现"updating text"
C++ Program, Console/Terminal Output. How to implement "updating text"
我正在写一个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
代替n
或std::endl
。不同之处在于,如果没有新行,后者将光标返回到起始行。
免责声明(根据Lightness的反对意见):这并不一定是可移植的,所以YMMV.
相关文章:
- 如果没有malloc,链表实现将失败
- 如何在c++中实现处理器调度模拟器
- 如何在c++中使用引用实现类似python的行为
- 实现无开销push_back的最佳方法是什么
- 使用简单类型列表实现的指数编译时间.为什么
- 如何在BST的这个简单递归实现中消除警告
- 实现一个在集合上迭代的模板函数
- 我应该实现右值推送功能吗?我应该使用std::move吗
- 如何正确实现和访问运算符的各种自定义枚举器
- C++Union/Struct位域的实现和可移植性
- 这个极客对极客的trie实现是否存在内存泄漏问题
- 在c++中实现LinkedList时,应出现未处理的错误
- 为左值和右值的包装器实现C++范围
- 使用模板进行堆栈实现; "name followed by :: must be a class or namespace"
- 使用GSoap实现ONVIF
- 在用于格式4的arm模拟器中实现功能时的一个问题
- 用于AVX的ln(x)的实现,m256
- 用常见虚拟函数实现的任意组合来实现派生类的正确方法是什么
- 在C++中,如何在类和函数(可能是模板化的)的头中编写完整的实现
- C++程序,控制台/终端输出。如何实现"updating text"