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;
}