将状态栏添加到C++控制台应用程序

问题描述:

我正在使用C++制作Linux应用程序,它将信息输出到控制台。部分程序需要一段时间才能进行计算,我想在控制台中添加一个类似于wget中使用的状态栏(我将自己的描述放在下面)。将状态栏添加到C++控制台应用程序

%complete[===========>    ] eta 

什么是最好的方法来实现这个目标?是否有任何有用的库可以轻松添加此功能?

+2

您使用的是什么样的控制台?有些人对状态行进行本地支持,然后从状态行返回。检查terminfo或termcap数据库中的'tsl'和'fsl'功能。 –

+0

我发布了一个[类似问题]的答案(http://stackoverflow.com/questions/4956442/displaying-completed-while-executing-in-c/4958152#4958152)(_“在C中执行时显示完成% “_”)主要处理终端光标的控制。 – gamen

如果你的程序是像wget,也就是说,它基本上是一个批处理程序,不需要全屏UI(为此我推荐ncurses),您可以使用这个技巧在行后打印回车符(但不是换行符);接下来你写的东西会覆盖同一行。

这是一个演示。

#include <iostream> 
#include <unistd.h> 

int main(void) 
{ 

     for (int i = 0; i < 10; i++) { 
       std::cout << "Status: " << i << "\r" << std::flush; 
       sleep(1); 
     } 
     std::cout << "Completed.\n"; 
} 
+1

好戏。但要小心,每一行和前一行一样长(否则输出结束空格) –

+0

@BasileStarynkevitch:好点。 – ibid

ncurses库应该对您有用。或者你也可以通过字符书写的进展行字符,使用退格,呼吁fflushstd::flush

一个更简单的方法就是只输出点......