を呼び出した後clear
、何らかの方法で無効な入力をストリームから削除する必要もあります。1 つの方法を次に示します。
cin >> arr[index];
if (!cin)
{
cin.clear();
std::string ignoreLine; //read the invalid input into it
std::getline(cin, ignoreLine); //read the line till next space
index--;
continue;
}
これcin
は、無効な入力の読み取りに失敗すると、ストリームに残るためです。なんらかの方法で削除する必要があります。読んで無視するだけです。
次のようにも使用できますignore
。
cin.clear();
cin.ignore(std::numeric_limits<streamsize>::max(),' ');
私の意見では、入力がスペースで区切られている場合(および無効な入力を検査したくない場合)は、これの方が優れています。オンラインドキュメントには次のように書かれています:
istream::無視
istream& ignore( streamsize n = 1, int delim = EOF );
文字の抽出と破棄
入力シーケンスから文字を抽出して破棄します。
n 文字が抽出されて破棄されるか、文字 delim が見つかったときのいずれか早い方で、抽出は終了します。後者の場合、delim 文字自体も抽出されます。