控制台上没有显示 \b 字符的输出
No output is displayed on console for \b character
以下代码片段在 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));
" 语句 打印每次迭代的输出。
预期输出:
在每个迭代控制台上应该在擦除旧计数值后输出新的计数值。换句话说,控制台应该显示计数变量的最新值。
std::cout
是缓冲流,因此您必须 flush
它以保证在 close
:
之前写入数据
std::cout << std::string(std::to_string(count).length(), '\b') << std::flush;
std::cout << ++count << std::flush;
以下代码片段在 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));
" 语句 打印每次迭代的输出。
预期输出: 在每个迭代控制台上应该在擦除旧计数值后输出新的计数值。换句话说,控制台应该显示计数变量的最新值。
std::cout
是缓冲流,因此您必须 flush
它以保证在 close
:
std::cout << std::string(std::to_string(count).length(), '\b') << std::flush;
std::cout << ++count << std::flush;