再次,我的老師無法回答我的問題。我知道誰可能是能夠...setbuf()是否會影響cout?
所以,我從來沒有真正學會C.在C++中,我會很明顯,使用COUT聲明所有的時間。在最近的一次任務,我的老師告訴我們,以確保把
setbuf(stdout , NULL);
在頂部的main(),以獲得無緩衝輸出,從而使我們能夠正確地看到輸出。
我的問題是這樣的:將本聲明影響的cout語句,或者乾脆一個printf()語句,我打電話?
在此先感謝!
再次,我的老師無法回答我的問題。我知道誰可能是能夠...setbuf()是否會影響cout?
所以,我從來沒有真正學會C.在C++中,我會很明顯,使用COUT聲明所有的時間。在最近的一次任務,我的老師告訴我們,以確保把
setbuf(stdout , NULL);
在頂部的main(),以獲得無緩衝輸出,從而使我們能夠正確地看到輸出。
我的問題是這樣的:將本聲明影響的cout語句,或者乾脆一個printf()語句,我打電話?
在此先感謝!
默認情況下,輸入輸出流和標準輸入輸出是同步的。 Reference.
這並不意味着手動調節標準輸入輸出緩衝是一個好主意,但!你可能希望利用std::endl
或std::flush
(來自<ostream>
),這可能會對你有所幫助。例如,
std::cout << "Hello, world!" << std::endl;
或
std::cout << "Hello, world!\n" << std::flush;
這兩個做同樣的事情。 (std::endl
=打印底線,然後沖洗。)
默認情況下,如果標準輸出或COUT被打印到控制檯時,輸出行緩衝。這意味着每一個打印的換行都會刷新輸出。你可以顯式調用flush(),只要你想重寫行爲,以防萬一,輸出將被重定向到一個文件,並且你想使用tail -f並且需要實時輸出某些輸出。
正如克里斯說,sync_with_stdio應配合無緩衝標準輸出與緩衝COUT(默認),但如果你正在做的是使用COUT,而不是用在標準輸出函數setbuf,更好的選擇是對指針使用pubsetbuf由rdbuf返回。即:
// make cout unbuffered
std::cout.rdbuf()->pubsetbuf(0, 0);
另一個可能有趣的功能是看tie。
通常,當立即看到輸出很重要時,我們討論的是複雜,高度可靠的金融例程,它必須將事務記錄到硬盤中,然後才能將其發送給對方。或者,(更常見的情況下)我們希望即使在程序崩潰時也能看到調試消息。
既然你學習,我假設你正在處理的第二種情況。在這種情況下,我的建議是使用stderr而不是stdout。默認情況下它是無緩衝的,您可以將其與stdout分開重新定向,將輸出放在一個地方,並將您的輸出放入另一個地方。