0

GetInput フェーズでエラー チェックが正しく機能しないようです。数字の 1 ~ 5 がそこに入れられるまで、そのフェーズを繰り返そうとしています。ありがとう!

void GetInput(void)
{
    cout << "Please enter a number between 1 and 5: \n";
    cin >> OnetoFive;
    if (isdigit(OnetoFive) && (OnetoFive <= 5) && (OnetoFive >= 1))
    {
        return;
    }

    else 
    {
        system("cls");
        cin.clear();
        cin.ignore(INT_MAX, '\n');
        cout << "\n\nInvalid.  Please enter a number between 1 and 5: ";
        cin >> OnetoFive;
    }
}

わかりました、アルファ文字で機能するようになりましたが、値が 5 を超えるとループは機能しません... 1 回は機能しますが、2 回目は実行されます....何かアイデアはありますか?

4

3 に答える 3

1

まず、なぜ入力を 2 回求めるのでしょうか。あなたのループはそれを処理する必要があります。

次に、条件が次の場合に変更します

   if (( isdigit(OnetoFive) && OnetoFive >= 1) && (OnetoFive <= 5))

最初の条件として数字かどうかを確認する必要があります。コンディションオーダー重視!

于 2013-02-11T07:46:04.590 に答える
0

交換してみましたか:

else 
{
    cin.clear();
    cout << "\n\nInvalid.  Please enter a number between 1 and 5: ";
    cin >> OnetoFive;
    if ((OnetoFive >= 1) && (OnetoFive <= 5) && isdigit(OnetoFive))
    {
        system("cls");
        return;
    }

}

else 
{
    GetInput();
}
于 2013-02-11T07:48:28.743 に答える
0

C++ は私の得意分野ではありませんが、ニーズに適したループがどのように見えるかを理解するために、次のようにします。

bool GetInput()
{
    cout << "Please enter a number between 1 and 5: \n";
    cin >> OnetoFive;

    if(isdigit(OnetoFive) && (OnetoFive <= 5) && (OnetoFive >= 1))
        {
            return true;
        }
    else 
        {
        system("cls");
        cin.clear();
        cin.ignore(INT_MAX, '\n');
        cout << "\n\nInvalid.  Please enter a number between 1 and 5: ";
        }   
    return false;
}

while(!GetInput())
{
    GetInput();
}

私の Android Phone で書かれたコードなので、箱から出してすぐに動作することを保証することはできませんが、アイデアが得られるはずです。

于 2013-02-11T09:23:43.170 に答える