-2

ユーザーが 1 または 2 を入力するたびにループを停止したいwhile。それ以外のものが入力された場合は、繰り返す必要があります。変数名の前に感嘆符を付け、等号を使用してみました。単一の or 演算子を使用してみました。

petId変数は正しい数値を取得しています。"Dog" と "Cat" の s が表示さNSLog()れます。1 または 2 を入力してもループがループするのはなぜですか?

int petId;
while(petId != 1 || petId!=2)
        {
            NSLog(@"%d",petId);
            NSLog(@"Would you like to create a dog or a cat?\n1.Dog 2.Cat");
            //Scan user input
            scanf("%i",&petId);
            if(petId == 1)
            {
                NSLog(@"Dog");
            }
            else if(petId==2)
            {
                NSLog(@"Cat");
            }
            else
            {
                NSLog(@"Invalid Entry");
            }
        }
4

4 に答える 4

4

OK、あなたは自分を蹴ります。

||手段OR 。EITHER 式が true: (petId != 1)OR(petId != 2)の場合、ループは続行されます。

  • もしそうpetID == 1ならpetID != 2
  • もしそうpetID == 2ならpetID != 1
  • もしそうならpetID == 3、両方とも真です。

を探してい&&ます。

while (exp1 && exp2) { ...

petIdその後、ループは 1 でも 2 でもない限り継続します。

于 2013-01-28T00:46:35.467 に答える
1

入力が 2 の場合、それは 1 ではありません。

入力が 1 の場合、それは 2 ではありません。

したがって、 (petId != 1 || petId!=2) 条件は常に真です。

これを (petId != 1 && petId!=2) に置き換えれば完了です!

于 2013-01-28T01:12:52.423 に答える
0

ブール演算子を間違えた可能性があります:

while(petId != 1 || petId!=2)

while(petId != 1 && petId!=2)
于 2013-01-28T00:44:34.563 に答える
0

が 1 に等しくない場合、または2 に等しくない場合、式petId != 1 || petId!=2は真です。同時に 1 と 2 の両方になることはできないため、この式は常に真です...petId

試すpetId != 1 && petId != 2

于 2013-01-28T00:45:12.003 に答える