我想打印一行,而不是删除它,而不是在同一行中打印另一行。我想这样做是因为我不会因为获取在我打印Processing file <X>
之类的内容之前打印的信息而放松或回头。我知道这是可能的,因为我看过这样的东西,但我没有找到办法。
这是我的代码:
std::cout << "Print important information" << std::endl;
for (int i = 0; i < filesVec.size(); i++)
{
std::cout << "Processing file " << i << std::endl;
// processing file
}
std::cout << "Print another important information" << std::endl;
这在第一和第二重要信息之间打印了很多行。我想打印所有processing file X
信息,看看它是不是卡在某个文件上。最后我需要重要的信息,所以有声明要做我想要的吗?
答案 0 :(得分:5)
您可以使用VT100 escape code清除该行,然后使用回车符\r
。大多数终端,包括xterm和Visual Studio Community 2019控制台,都可识别VT100。要确保打印该行,您可以使用std::flush
结束。在for循环结束后,您可以使用换行符和完成报告关注最新的进度行。
最终结果如下:
std::cout << "Print important information" << std::endl;
for (int i = 0; i < filesVec.size(); i++)
{
std::cout << "\33[2K\rProcessing file " << i << std::flush;
// processing file
}
std::cout << std::endl; // Added to not overwrite the last status message.
std::cout << "Print another important information" << std::endl;