代码在 Linux g++ 中无法按预期工作? [已关闭]

问题描述 投票:0回答:3

在linux g++编译器中,不打印第三个数字,并且不打印“reached”。 但我预计会打印“reached”,之后它将进入无限循环。 它使用 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;
}
c++ linux stdout
3个回答
5
投票

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

cout<<"reached"<<flush;

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

endl
:

cout<<"reached"<<endl;

4
投票

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

您可以更改:

 cout<<"reached";

至:

 cout<<"reached" << endl;

或:

 cout<<"reached" << flush;

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

另一种选择是使用

cerr << "reached";
- 将立即打印,因为
cerr
没有缓冲。


0
投票

这与

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

© www.soinside.com 2019 - 2024. All rights reserved.