2011-10-26 42 views
0

我學會了在cout語句結束時使用endl來刷新緩衝區的難題。我感到困惑的是,爲什麼endl只是有時候是必要的。通常我可以做cout <<「text」只顯示部分時間

cout << "test"; 

它會顯示測試。但是在一個很長的控制檯程序中間,我會有一個類似的cout語句,並且不會顯示任何內容,代碼也不會繼續。添加endl到最後通過刷新緩衝區並顯示文本來解決問題。但是什麼導致緩衝區在某些情況下被自動刷新並在其他情況下手動刷新?我無法提供任何示例代碼,因爲我不知道如何重現問題,但我認爲大部分人都看到了這一點。

+0

大多數庫都在換行符「\ n」中刷新,所以如果以此結束,則不需要'endl'。如果你不想換行,你也可以使用'flush'。 –

回答

2

當緩衝區達到一定長度或程序正常結束時,緩衝區被刷新。

+0

如果我寫cout <<「test1」; cin >> var;程序不會終止,而是等待var輸入。但是,仍然顯示test1。那麼緩衝區達到了這個「一定的長度」?你怎麼知道那是什麼? – gsingh2011

+0

@ gsingh2011我想'cin'然後沖洗緩衝區。畢竟,不能顯示之前顯示的內容。 –

+3

如果您想了解cin的功能,那麼首先將任何輸出刷新到屏幕上是非常有意義的。 – Nathanael

1

何時以及爲什麼自動刷新緩衝區取決於您正在使用的特定平臺的實施者。您不應該對緩衝區何時被刷新做出任何假設或猜測。

當你想顯示文本時,只需添加std :: endl即可。 ;)

相關問題