数字を入力するとコードがループしてスタックしてしまい、出力が「無効な入力です。もう一度やり直してください」というエラーが表示されるだけです。シンプルなメニューばかりです。
質問する
101 次
2 に答える
3
cin からの読み取りでエラーが発生するような「無効な」ものをcin.clear()
入力した場合は、それ以上の入力を読み取れるように呼び出す必要があります。そうしないと、stream in 演算子はすぐに戻ります。
通常、ユーザー入力を読み取るときは、cin の状態を確認して終了するか、無効な場合は何らかのエラー処理を行います。さらに、入力試行が失敗した場合、エラーの原因となった文字はまだ cin に残っているため、無視する必要があります (たとえば、次の改行まで):
#include <iostream>
#include <limits>
int main() {
int userOption;
while(1) {
while(!(std::cin >> userOption)) {
std::cout << "Invalid input." << std::endl;
std::cin.clear();
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
}
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
std::cout << userOption << std::endl;
}
return 0;
}
于 2013-09-24T12:41:58.550 に答える