-4

Linux g++ コンパイラでは、3 番目の数字が出力されず、"reached" も出力されません。しかし、「到達」が出力されると予想していましたが、その後は無限ループに陥ります。コードブロックを使用してウィンドウで期待どおりに実行されます

#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;

または、永久ループを削除するだけです。

もう 1 つの方法は、バッファリングされていないcerr << "reached";ため、すぐに出力される -を使用することです。cerr

于 2013-01-30T18:33:55.337 に答える
0

のバッファリングと関係がありcoutます。無限ループに入る前に、std::endlまたはstd::flushtoを書き込んでバッファをフラッシュします。cout

于 2013-01-30T18:32:41.697 に答える