簡體   English   中英

Linux中std :: cout的奇怪行為

[英]Strange behaviour of std::cout in Linux

我正在嘗試使用std::cout在2個嵌套for周期中打印結果。 但是,結果不會立即打印到控制台,而是會延遲(在兩個周期或程序都完成之后)。

我認為這種行為不正常,在Windows下可以正常打印。 該程序不使用線程。

問題可能出在哪里? (Ubuntu 10.10 + NetBeans 6.9)。

std::cout是一個流,並且已緩沖。 您可以通過幾種方法沖洗它:

std::cout.flush();

std::cout << std::flush;

std::cout << std::endl;  // same as:  std::cout << "\n" << std::flush`


約翰尼:

我在循環之前使用std :: endl刷新緩沖區。 當打印代表周期內已處理數據百分比的點時,會出現問題。

如果循環之前刷新緩沖區,不影響循環的輸出。 您必須在循環中或循環后沖洗,才能看到輸出。

如果不刷新輸出,則不能保證您的輸出在程序外部不可見。 它不在您的終端中打印的事實僅僅是由於Linux在輸出為tty時默認行行緩沖的結果。 如果您在Linux上運行程序,其輸出通過管道傳遞到另一件事,例如

 ./your_program | cat

然后,默認緩沖區將大很多,最有可能的是至少為4096個字節。 因此,直到大緩沖區填滿之前,什么都不會顯示。 但是實際上,除非您自己刷新std :: cout,否則行為是特定於操作系統的。

要刷新std :: cout,請使用:

std::cout << std::flush;

另外,使用

std::cout << std::endl;

是通往的捷徑

std::cout << '\n' << std::flush;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM