2015-07-20 40 views
1

我有一个包含字符的数组。 我试图每秒打印一次元素。使用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++; 
} 

任何关于如何让每一个元素,而不必进行换行按时间顺序打印推荐?

回答

3

这出于某种原因只是等待110秒,比在一次打印出整个阵列。

其实它不,但你的输出是缓冲。在C++流对象,OS数据管道和终端中都有缓冲。

您的信息流认为这会浪费资源,一次只能通过一个字符,而且这种方式是正确的:信息流不知道您需要等待每个字符。

虽然不需要换行符,你基本上可以强制刷新,像这样:

std::cout << std::flush; 

回想一下,std::cout << std::endl相当于std::cout << '\n' << std::flush,这是你不想要的部分'\n'

这通常已经足够,但您可能也需要重新配置您的终端以关闭线路缓冲。 (这是不太可能的输出,但相当普遍的输入)。

+0

感谢您的帮助! 修复它。 – obsi