-4

在linux g++编译器中,不打印第三个数字,也不打印“reached”。但我预计会打印“到达”,然后它会进入无限循环。它使用代码块在 Windows 上按预期执行

#include <iostream>
int main()
{
    int a;
    for (int i = 0; i < 3; i++) {
        std::cin >> a;
        std::cout << a;
    }
    std::cout << "reached";
    while (1) {}
    return 0;
}
4

3 回答 3

5

"reached"被写入内部缓冲区,但不写入控制台。通常,缓冲区会在每个换行符中写入控制台。如果您不想要换行符,请刷新缓冲区(即将其写入控制台可见):

cout<<"reached"<<flush;

如果您想要换行符,请使用endl

cout<<"reached"<<endl;
于 2013-01-30T18:32:04.697 回答
4

因为您永远不会结束程序,因此永远不会刷新您的 stdout (cout) 输出。

您可以更改:

 cout<<"reached";

到:

 cout<<"reached" << endl;

或者:

 cout<<"reached" << flush;

或者干脆删除你的永远循环。

另一种选择是使用cerr << "reached";- 将立即打印,因为cerr没有缓冲。

于 2013-01-30T18:33:55.337 回答
0

它与cout. 在进入无限循环之前写入std::endlstd::flush刷新缓冲区。cout

于 2013-01-30T18:32:41.697 回答