2

次のコードには、実行するたびに論理エラーが含まれ、whileループが実行されているコードに1または0を入力します。誰かが理由を教えてもらえますか?

bool getmove()
{
    bool move;
    cout << "Would you like to make the first move?(1 for yes 0 for no)\n";
    cin >> move;
    while(move != 1 || move != 0 || !cin.good())
    {
        if(!cin.good())
        {
            cout << "ERROR please try again\n";
            cin.clear();
            cin.ignore(80,'\n');
            cin >> move;
        }
        else
        {
            cout << "Invalid input please try again\n";
            cin >> move;
        }
    }
    return move;
}
4

2 に答える 2

1

この行を見てください:

while(move != 1 || move != 0 || !cin.good())

それは常にそうですmove != 1 || move != 0(両方になることはできないため)。

さらに、キャストに頼るのではなく、文字列のようなものを読み込んでテストすることで、問題を回避できます。

于 2012-10-23T02:41:51.157 に答える
1

ブール値の入力を検証できる関数を作成しようとしている場合、コードは次のように簡略化できます。

bool getmove()
{
    bool move;
    cout << "Would you like to make the first move?(1 for yes 0 for no)\n";
    while (!(cin >> move))
    {
        cout << "Invalid input please try again\n";
        cin.clear();
        cin.ignore(80, '\n');
    }
    return move;
}

while (!(cin >> move))有効なブール値がコンソールから読み取られ、 に書き込まれるまで、 がループを繰り返すことを理解することが重要ですmove

于 2012-10-23T03:02:04.863 に答える