2017-10-01 7 views
2

whileループの条件としてcinを使用しています。ファイルまたは文字の末尾が入力されない限り、整数を受け入れます。コンソールウィンドウは結果の直後に消えます。私は画面を保持することができますどのようにwhileループではC++ cinが使用されていますが、コンソール画面は保持されません

#include<iostream> 

using namespace std; 

int main() { 


    int num = 0, sum = 0; 

    while (cin >> num) { 
     sum += num; 
    } 


    cout << "Sum is: " 
     << sum 
     << endl; 

    cout << endl; 

    cin.get(); 
    return 0; 
} 
+0

を、あなたは何を意味するか、説明できますホールド? – OutOfBound

+2

ここでの問題は、各数値の後に入力された改行が 'cin.get()'呼び出しによって読み込まれるように入力バッファに残っていることです。あるいは、非数値入力をした場合、そのすべての* all *は次の入力操作で読み込まれます。 –

+0

これは私が最近学んだことですが、std :: cinが保持するバッファはあなたのプログラムを保持したいならば空でなければなりません。 cin.get()はストリームバッファから次の文字を抽出し、次に続行します。あなたのプログラムを保持または一時停止する唯一の理由は、それが空である場合です。その場合、ユーザからの入力を待っています。 – Zebrafish

答えて

0

cin.get()あなたが「入力」と約束し、最後の番号からの入力ストリームに残されている改行文字を、消費します。したがって、出力コンソールが消える前に次のユーザー入力まで待つことを期待している次のcin.get()は、追加の入力を待つことはなく、すぐに戻ります。この問題を解決するために

、あなたは次の項目を読み込む前に、バッファ内の次の新しい行(を含む)まで(参照cppreference/ignore)何かを無視することができます:

int main() { 
    int a; 

    cin >> a; 

    // do something with a, write to console, ... 

    cin.ignore (std::numeric_limits<std::streamsize>::max(), '\n');   
    cin.get(); 
} 
+0

これは機能しません。代わりにcin.clear()cin.ignore()cin.get()が使用されます。これらの3つの機能はコードで書かれていると動作するようですが、私はその作業を理解できません。あなたは私にこの作品の仕方を説明できますか? –

関連する問題