使用 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 来说不太可能,但对于输入来说很常见)。
我有一个包含字符的数组。 我试图每秒打印一次元素。
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 来说不太可能,但对于输入来说很常见)。