我正在尝试使用for
以2个嵌套std::cout
周期打印结果。但是,结果不会立即打印到控制台,但会有延迟(在循环或程序完成后)。
我不认为这种行为正常,在Windows打印下工作正常。该程序不使用线程。
哪里可能是问题? (Ubuntu 10.10 + NetBeans 6.9)。
答案 0 :(得分:9)
std::cout
是一个流,它是缓冲的。您可以通过以下几种方式进行冲洗:
std::cout.flush();
std::cout << std::flush;
std::cout << std::endl; // same as: std::cout << "\n" << std::flush`
<小时/> 约翰尼拉:
我使用std :: endl在循环之前刷新缓冲区。当打印点表示循环内处理数据的百分比时,会出现问题。
如果在循环之前清空缓冲区,则不会影响循环中的输出 。你必须在循环中或之后进行冲洗,以查看输出。
答案 1 :(得分:1)
如果您没有刷新输出,则无法保证您的输出在程序外可见。它不在您的终端中打印的事实只是在输出为tty时linux中默认行为进行行缓冲的结果。如果你在linux上运行你的程序,其输出通过管道输送到另一个东西,比如
./your_program | cat
然后默认缓冲区将更大,最可能的是至少4096字节。因此在大缓冲区满了之前不会显示任何内容。但实际上,除非你自己刷新std :: cout,否则行为是特定于操作系统的。
要刷新std :: cout,请使用:
std::cout << std::flush;
另外,使用
std::cout << std::endl;
是
的捷径std::cout << '\n' << std::flush;