在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;
}
"reached"
被写入内部缓冲区,但不写入控制台。通常,每个换行符都会将缓冲区写入控制台。如果您不需要换行符,请刷新缓冲区(即将其写入控制台可见):
cout<<"reached"<<flush;
如果您想要换行符,请使用
endl
:
cout<<"reached"<<endl;
因为你永远不会结束程序,因此永远不会刷新你的 stdout (cout) 输出。
您可以更改:
cout<<"reached";
至:
cout<<"reached" << endl;
或:
cout<<"reached" << flush;
或者干脆删除你的永远循环。
另一种选择是使用
cerr << "reached";
- 将立即打印,因为 cerr
没有缓冲。
这与
cout
的缓冲有关。在进入无限循环之前,将 std::endl
或 std::flush
写入 cout
以刷新缓冲区。