2014-02-25 77 views
20

我有代碼,如下述:C++力的std :: COUT平齊(打印到屏幕)

std::cout << "Beginning computations..."; // output 1 
computations(); 
std::cout << " done!\n";     // output 2 

的問題,但是,是經常輸出#1和輸出#2出現(幾乎)同時。也就是說,直到computations()返回後,經常輸出#1纔會打印到屏幕上。由於輸出#1的全部目的是指示背景中發生了某些事情(並且因此鼓勵來自用戶的耐心),所以這個問題不好。

有什麼辦法可以在computations()調用之前強制std::cout緩衝區打印?或者,是否有其他方法(使用除std::cout以外的其他方式)打印到標準輸出以解決此問題?

+4

我聽說'std :: endl'這個東西很流行...... – 2014-02-25 21:37:26

+2

@ebyrob但是這樣會結束這一行,如果他想在計算之後繼續在同一行上打印,他需要手動沖洗。 – leemes

+0

@非常真實。在這種情況下,他可以使用'fprintf()','std :: flush'(如下所示),或者修改他的'cout'版本,以便在每行代碼的末尾自動刷新......我有一個SO最後一個線程,但似乎已經失去了它。 – 2014-02-25 21:48:36

回答

33

只需插入std::flush

std::cout << "Beginning computations..." << std::flush; 

還要注意的是插入std::endl也將寫入新行後沖洗。

+0

嗯......你是用endl編輯你的答案,還是我只是瞎了? – user1810087

+0

@ user1810087對不起,我編輯過,但很快。我想是在你回答之前。 –

+0

:D我對我的眼睛/大腦/感知有疑問...... – user1810087

4

除了約瑟夫曼斯菲爾德的回答,std::endl也做了沖洗(除了新的一行)。

在輸出序列os中插入一個endline字符並刷新它,就像調用os.put(os.widen('\ n')),接着os.flush()一樣。