2

入力として整数のみを受け入れ、一種の検証と同時にそれをループしようとしています。問題は、ユーザーが「Two」の行に沿って何かを入力すると、while ループがユーザーに再度尋ねる前に 3 回入力を通過することです。これが起こらないようにして、3回の繰り返しをスキップする方法はありますか?

cout << "Enter Student ID: ";
while(!(cin >> id))
{
    cout << "\nERROR: Please enter a Positive Whole Number" << endl;
    cin.clear();
    cin.ignore ();
    cout << "Enter Student ID: ";
}
4

2 に答える 2

3

これを使用できます。

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

すべての行がスキップされ、無効な文字をいくつ入力しても、余分なループの反復は発生しません。

于 2012-11-25T07:46:09.000 に答える
0

whileループが繰り返される理由は、ストリームが完全に抽出されていないため、この行を使用するだけです。

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

どんなに大きな入力を与えてもループが抽出されるため、ループは1回だけ繰り返されます。Cin.ignore()は、ストリームから1文字だけを削除します。

あなたの場合、「2」と入力すると、最初の反復の後、「t」のみが抽出され、2回目の反復では入力は「wo」になります。ただし、この行を追加すると、2回目の反復でストリームが空になり、ユーザーからの入力を受け取ります。

于 2012-11-25T09:58:48.990 に答える