0

数字を入力するとコードがループしてスタックしてしまい、出力が「無効な入力です。もう一度やり直してください」というエラーが表示されるだけです。シンプルなメニューばかりです。

4

2 に答える 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 に答える