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

时间:2015-07-20 18:13:16

标签: c++ arrays loops sleep

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

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

由于某种原因,只需要等待110秒,然后立即打印出整个阵列。

但是如果我在每个元素之后添加一个新行就可以了。

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

有关如何按时间顺序打印每个元素而不必制作换行符的任何建议?

1 个答案:

答案 0 :(得分:3)

  

由于某种原因,只需要等待110秒,然后立即打印出整个阵列。

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

您的信息流认为将资源一次传递给一个资源会浪费资源,这是正确的:信息流并不知道您有一秒钟在每个资源之间等待。

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

std::cout << std::flush;

回想一下,std::cout << std::endl相当于std::cout << '\n' << std::flush,而且它是您不想要的'\n'部分。

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