2012-05-11 85 views

回答

7

你可能在这里看到的是输出被缓冲的效果。一般来说,直到使用std::endl之后,输出才会被写入。

for(int i=0;i<9;i++) 
{ 
    // Flushes and adds a newline 
    cout<< "||" << endl; 
    sleep(1); 
} 

引擎盖下std::endl正在添加新行字符,然后使用std::flush强制输出到控制台。你可以直接使用std::flush得到相同的效果

for(int i=0;i<9;i++) 
{ 
    cout << "||" << flush; 
    sleep(1); 
} 
+3

也许你应该确定endl既添加行尾又调用flush。大多数情况下,单独一个'\ n'就足够了。 – Klaim

+1

*一般情况下,直到打印新行时输出才会真正写入** **。* ..这是不正确的。换行符不能保证。请注意,'std :: endl'向缓冲区**和**添加一个换行符,然后将其刷新。 – Nawaz

+1

std :: endl的工作原理是添加行结束符(\ n代表* nix,\ r \ n代表Windows)和一个std :: flush。关键部分是std :: flush,但是std :: endl肯定可行。 –

13

你不会冲洗你的输出。

std::cout << "||" << std::flush; 
相关问题