例如:
float count1 = 0;
float count2 = 0;
for(int i = 0; i<1000000; i++) {
printf("Calculation plus 1: %f", count1);
printf("Calculation plus 2: %f", count2);
count1++;
count2 += 2;
}
如何让这些计数器在终端输出上实时运行,实时更新。 没有使用新的线路。 覆盖以前的输出。 看起来像这样:http://bkm.billking.io/projects/pi/
答案 0 :(得分:3)
C和C ++都不能提供随处可见的功能。溶液
我用过&#39; \ r&#39;将光标放在一行中第一个字符的顶部。 但这似乎不足以满足您的需求。
(顺便说一下,我认为你的意思是在每个当前版面的末尾都有一个&#39; \ n&#39;)
使用回车的回车的示例:
std::cout << "\r " << showProgressW(" ") << std::flush;
&#39; showProgressW()&#39;生成一个字符串,包括&#34;%完成&#34;和#34;字节数&#34;操作期间的其他进度信息可能需要10秒钟。在此操作期间,没有其他线程可以写入std :: cout(具有线程不安全问题)。
对于文本输出(当用户设备支持此功能时),我发现 ANSI转义序列直接进行。例如:
inline void gotoxy (int col = 1, int row = 1) { printf ("\e[%d;%dH", row, col ); };
inline void gotoxy (char *col, char *row) { printf ("\e[%s;%sH", row, col); };
使用这些函数,您可以将光标放回任何输出字段的第一个字符的顶部,然后输出新值。 (我通常使用std :: cout而不是printf。)还有很多其他的转义序列和组合,可能在简单的工作中很有用,即向上(向下,向左,向右)n行
对于文本输出,其中最小的窗口&#39;风格可能会有所帮助,我使用的是诅咒,这有点参与其中。
我认为下一个选择涉及gui i / o。