代码在Linux g ++中没有按预期工作?

时间:2013-01-30 18:31:01

标签: c++ linux compiler-construction output

在linux g ++编译器中,不打印第三个数字,并且不打印“到达”。 但是我预计将会打印出“达到”,之后它会进入无限循环。 它使用Codeblocks

在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;
}

3 个答案:

答案 0 :(得分:5)

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

cout<<"reached"<<flush;

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

cout<<"reached"<<endl;

答案 1 :(得分:4)

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

您可以更改:

 cout<<"reached";

为:

 cout<<"reached" << endl;

或:

 cout<<"reached" << flush;

或者只是删除你的永久循环。

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

答案 2 :(得分:0)

它与cout的缓冲有关。在进入无限循环之前,将std::endlstd::flush写入cout以刷新缓冲区。