2009-09-04 105 views
11

如何從cout獲得無緩衝輸出,以便它立即寫入控制檯而無需刷新(與cerr類似)?使用cout無緩衝輸出

我認爲這可以通過rdbuf() - > pubsetbuf完成,但這似乎不起作用。下面的代碼片段應該立即輸出到控制檯,然後等待幾秒鐘。但是,它只是等待,並且只在程序退出並且緩衝區被刷新時纔會輸出。

#include <iostream> 

int main() 
{ 
     std::cout.rdbuf()->pubsetbuf(0, 0); 
     std::cout << "A"; 
     sleep(5); 
} 

回答

32
std::cout.setf(std::ios::unitbuf); 

應該做的伎倆。

+0

這個解決方案確實爲我工作,謝謝!對其他人的提示:使用cout或printf時緩衝似乎會發生,即使在行末使用了換行符也會發生緩衝。 – Moot 2017-05-05 06:13:44