以下のコードは、すべての入力を 1 回チェックし、入力が数値でない場合は常に「数値ではありません」と表示する必要があります。
int input;
while (1 == 1){
cout << "Enter a number: ";
try{
cin.exceptions(istream::failbit);
cin >> input;
}catch(ios::failure){
cout << "Not a number\n";
input = 0;
}
}
問題は、catch が呼び出されると (数値ではない場合)、while() ループが数回実行された場合のように「無効な数値」が際限なく表示されますが、新しい入力は求められないことです。