0

以下は、C++のシンプルなメニューのコードです。何らかの理由で、ガベージ入力を与えると、適切に反応します(「選択を再試行してください」)。ただし、ループをもう一度通過してエラーメッセージが表示され、最後に通常の機能に戻ります。

編集

入力変数はcharです。ガベージ入力の長さが1文字しかない場合、ループは想定どおりに機能します。ユーザーが何かを再入力できるようになる前に、ループが複数回実行される結果となる追加の文字がある場合。

char input = 0;
    while (input != 4)
{
    cout << "1. Circle";
    cout << "\n2. Rectangle";
    cout << "\n3. Triangle";
    cout << "\n4. Quit";
    cout << "\nChoose a shape: ";
    cin >> input;

    switch(input)
    {
    case '1':
        circleFunctions();
        break;
    case '2':
        rectangleFunctions();
        break;
    case '3':           
        triangleFunctions();
        break;
    case '4':
        exit(4);
    default:
        cout << "\nPlease try your selection again...\n";
        input = NULL;
        cin.ignore();
        break;
    }

    cin.ignore();
    cout << "\n";
}
4

2 に答える 2

1

デフォルトのケースが発生した場合は、入力バッファをクリアする必要があります。

std::cin.clear();

その後、入力ストリーム内のすべてを無視します。

std::cin.ignore(INT_MAX);

これにより、cinバッファーが良好な状態になり、抽出演算子(>>)が正しく機能するはずです。

于 2012-08-05T00:19:53.153 に答える
0

答えが見つかりました。cin.ignoreに次のパラメーターを追加すると、機能するようになりました。

    cin.ignore(20, '\n');
于 2012-08-05T00:42:22.907 に答える