C++ 如何将固定进度条添加到C++;产生终端输出的程序(在Linux中)?

C++ 如何将固定进度条添加到C++;产生终端输出的程序(在Linux中)?,c++,linux,terminal,progress-bar,C++,Linux,Terminal,Progress Bar,我有一个包含循环文件的现有程序。它做各种事情,提供大量的终端输出。我希望在终端底部的同一行上有一个整体进度条,它保持静止,而文件操作的所有输出都打印在上面。我该怎么做这样的事情呢 编辑:所以,为了清楚起见,我试图解决一些固有的显示问题,如下所示: #include <unistd.h> #include <iostream> #include <string> using namespace std; int main(){ for (int i =

我有一个包含循环文件的现有程序。它做各种事情,提供大量的终端输出。我希望在终端底部的同一行上有一个整体进度条,它保持静止,而文件操作的所有输出都打印在上面。我该怎么做这样的事情呢


编辑:所以,为了清楚起见,我试图解决一些固有的显示问题,如下所示:

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

using namespace std;

int main(){
  for (int i = 0; i <= 100; ++i){
    std::cout << "processing file number " << i << "\n";
    string progress = "[" + string(i, '*') + string(100-i, ' ') + "]";
    cout << "\r" << progress << flush;
    usleep(10000);
  }
}
#包括
#包括
#包括
使用名称空间std;
int main(){

对于(int i=0;i据我所知,移动光标的唯一可移植方式是使用
\r
移动到行的开头。您提到您希望输出进度上方的内容。幸运的是,您在Linux上很幸运,可以使用终端转义码在终端上自由移动。查看这个例子:

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

using namespace std;

int main()
{
  cout << endl;
  for (int i=0; i <= 100; ++i)
  {
    string progress = "[" + string(i, '*') + string(100-i, ' ') + "]";
    cout << "\r\033[F" << i << "\n" << progress << flush;
    usleep(10000);
  }
}

这听起来很像。非常感谢你的示例和关于转义码的有用细节。我想我几乎找到了一个解决方案。你能看一下我对我的问题的最新编辑吗?我正在处理一个我无法真正修改的现有代码基础结构,所以我正在尝试编写进度条函数,使其能够正常工作绕过现有的
cout
s。你有什么想法吗?非常感谢你在这方面的帮助。我想我理解你现在在终端上移动的方法。我将继续研究如何处理现有代码产生的
cout
s,这些代码长度不同,需要保留,而不是打印-结束,再次谢谢
void print_progress_bar(int percentage){
  string progress = "[" + string(percentage, '*') + string(100 - percentage, ' ') + "]";
  cout << progress << "\r\033[F\033[F\033[F" << flush;
}

int main(){
  cout << endl;
  for (int i=0; i <= 100; ++i){
    std::cout << "processing file number " << i << "\n";
    std::cout << "    doing thing to file number " << i << "\n";
    std::cout << "    doing another thing to file number " << i << "\n";
    print_progress_bar(i);
    usleep(10000);
  }
  cout << endl;
  cout << endl;
  cout << endl;
  cout << endl;
}