在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;
}
答案 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::endl
或std::flush
写入cout
以刷新缓冲区。