[英]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.