首页 > 解决方案 > 控制台上不显示 \b 字符的输出

问题描述

以下代码片段在 while 循环的每次迭代中都没有打印任何内容。实际输出仅在程序执行结束时打印。这个问题仅在 CentOS 中遇到,因为在 Windows 中代码片段按预期工作。

std::cout << "Test \\b functionality: ";
int count = 0;
std::cout << count;
while (count < 10)
{
    std::this_thread::sleep_for(std::chrono::seconds(1));
    std::cout << std::string(std::to_string(count).length(), '\b');
    std::cout << ++count;
}

删除std::this_thread::sleep_for(std::chrono::seconds(1));语句 会在每次迭代时打印输出。

预期输出:在每次迭代控制台上应该在擦除旧计数值后输出新的计数值。换句话说,控制台应该显示计数变量的最新值。

标签: c++centos

解决方案


std::cout是一个缓冲流,因此您必须flush使用它来保证在 a 之前写入数据close

std::cout << std::string(std::to_string(count).length(), '\b') << std::flush;
std::cout << ++count << std::flush;

推荐阅读