【发布时间】:2019-12-11 00:42:33
【问题描述】:
以下代码 sn-p 在 while 循环的每次迭代中不打印任何内容。实际输出仅在程序执行结束时打印。这个问题只会在 CentOS 中遇到,因为在 Windows 中,代码 sn-p 可以按预期工作。
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;
}
Removing "std::this_thread::sleep_for(std::chrono::seconds(1));" statement 在每次迭代时打印输出。
预期输出: 在每次迭代控制台上应该在擦除旧计数值后输出新的计数值。换句话说,控制台应该显示计数变量的最新值。
【问题讨论】:
-
stdout 默认是行缓冲的。尝试
std::cout << ++count << std::flush或使用std::unitbuf 在每次写入后自动刷新 -
@Botje 有点挑剔,它是名为
stdout的FILE*,它是行缓冲的(除非它没有连接到终端,在这种情况下它是完全缓冲的)。std::cout本身是完全缓冲的,但由于它通常连接到stdout它实际上也是行缓冲的(除非没有连接到终端,如前所述)。 -
@Someprogrammerdude 对。我也应该在某处提到
setvbuf:) -
与
\b无关。您应该尝试删除它,看看它是否与问题有关!