使用 sleep() 以一秒为间隔打印数组元素

Printing array elements in one second intervals using sleep()

我有一个包含字符的数组。 我试图每秒打印一次元素。

int i=0;
while (i< 110)
{
    cout << arrayValue[i]<<"[=10=]";
    sleep(1);
    i++;
 }

出于某种原因,这只是等待 110 秒,然后立即打印出整个数组。

但是如果我在每个元素之后添加一个新行它就可以正常工作

 int i=0;
while (i< 110)
{
    cout << arrayValue[i]<<"[=11=]";
    cout<< endl;
    sleep(1);
    i++;
 }

关于如何让每个元素按时间顺序打印而无需换行的任何建议?

This for some reason just waits for 110 seconds and than prints out the whole array at once.

实际上没有,但是您的输出是 缓冲的。 C++ 流对象、OS 数据管道和您的终端中都有缓冲。

您的流认为一次通过一个字符传递会浪费资源,这是对的:流不知道您在每个字符之间有一秒钟的等待时间。

不过你不需要换行符;你基本上可以像这样强制冲洗:

std::cout << std::flush;

回想一下 std::cout << std::endl 等同于 std::cout << '\n' << std::flush,这是您不需要的 '\n' 部分。

这通常就足够了,但您可能还需要重新配置您的终端以关闭线路缓冲。 (这对于 output 来说不太可能,但对于输入来说很常见)。