C ++如何在删除之前使用同一行打印文本?

时间:2014-07-01 16:35:38

标签: c++

我想打印一行,而不是删除它,而不是在同一行中打印另一行。我想这样做是因为我不会因为获取在我打印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信息,看看它是不是卡在某个文件上。最后我需要重要的信息,所以有声明要做我想要的吗?

1 个答案:

答案 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;

另见Erase the current printed console line