-2

私は C++ の初心者で、ifs 内の ifs の演習をしようとしています。

最初の画像: http://img51.imageshack.us/img51/5851/b9qt.jpg Else if ステートメントがないため、2 回投稿されましたが、なぜロジックが間違っているのでしょうか? ただし、投稿された 2 番目のステートメントは正しいです。o_o

2 番目の画像: http://img96.imageshack.us/img96/1351/94bc.jpg 今回は else if ステートメントを使用し、1 回投稿しましたが、ロジックが間違っています。コードを何度も分析しましたが、問題は見つかりませんでした。XD 使用されるロジックは、最後のステートメントの下に属すべきではありませんか? o_o

int number1, number2, number3, number4, number5;

printf("\n\n First number: ");
scanf("%d", &number1);
printf("\n Second number: ");
scanf("%d", &number2);
printf("\n Third number: ");
scanf("%d", &number3);
printf("\n Fourth number: ");
scanf("%d", &number4);
printf("\n Fifth number: ");
scanf("%d", &number5);

if (number3 >= number4 && number5) {
    if (number4 >= number5) {
    printf("\n\n Your numbers have been sorted: ");
    printf("%d, %d, %d, %d, %d.", number1, number2, number3, number4, number5);

    printf("\n\n\n Program will now terminate..");
    } else if (number5 >= number4) {
    printf("\n\n Your numbers have been sorted: ");
    printf("%d, %d, %d, %d, %d.", number1, number2, number3, number5, number4);

    printf("\n\n\n Program will now terminate..");
    } else {
    printf("\n\n Invalid operation. Program will now terminate..");
    }
} else if (number4 >= number3 && number5) {
    if (number3 >= number5) {
    printf("\n\n Your numbers have been sorted: ");
    printf("%d, %d, %d, %d, %d.", number1, number2, number4, number3, number5);

    printf("\n\n\n Program will now terminate..");
    } else if (number5 >= number3) {
    printf("\n\n Your numbers have been sorted: ");
    printf("%d, %d, %d, %d, %d.", number1, number2, number4, number5, number3);

    printf("\n\n\n Program will now terminate..");
    } else {
    printf("\n\n Invalid operation. Program will now terminate..");
    }
} else if (number5 >= number3 && number4) {
    if (number3 >= number4) {
    printf("\n\n Your numbers have been sorted: ");
    printf("%d, %d, %d, %d, %d.", number1, number2, number5, number3, number4);

    printf("\n\n\n Program will now terminate..");
    } else if (number4 >= number3) {
    printf("\n\n Your numbers have been sorted: ");
    printf("%d, %d, %d, %d, %d.", number1, number2, number5, number4, number3);

    printf("\n\n\n Program will now terminate..");
    } else {
    printf("\n\n Invalid operation. Program will now terminate..");
    }
} else {
    printf("\n\n Invalid operation. Program will now terminate..");
}
4

2 に答える 2

3

これは、この問題を解決するための非常にひどい方法ですが、学習を続けるうちに、後でその理由を理解できるようになります。今のところ、if ステートメントを理解するための演習として、1 つの問題は

if(number3 >= number4 && number5) {
    ...
}

あなたが思っていることをしません。実際には次のように解釈されます

if( (number3 >= number4) && (number5) )

そこに一人でいることに注意しnumber5てください。C++ では次のようなことが言えます

bool someFlag = true;
if(someFlag) { ... }

の省略形として

if(someFlag == true)

これを、C++ (および C) では、任意の数値をブール値のように扱うことができるという事実と組み合わせます。あれは、

int x = 42;
int y = 0;
if(x) {
    printf("x is true\n");
}
if(y) {
    printf("y is true\n");
}

このコードは、「x は true」と出力しますが、「y は true」とは出力しません。ブール値として解釈されると 0 は false と見なされ、その他の数値は true と見なされるためです。

元のコードに戻ると、

if(number3 <= number4 && number5)

これは 2 つの異なるブール比較であり、両方の部分が true の場合、if ステートメントは true です。パート 1 は(number3 <= number4)、すでに理解しているものです。パート 2 はただnumber5の であり、先ほど説明したのと同じ規則に従います。

あなたが言う必要があるのは

if(number3 <= number4 && number3 <= number5)

そのための短い表記はありません。

于 2013-10-26T19:24:19.123 に答える
0

ifステートメント内の論理演算に問題があります。構文は正しいですが、結果は期待したものではありません。number3このステートメントは、がより大きく等しいかどうかをチェックし、 の場合number4は 1 ですtrue。次に、この結果が次の論理演算に適用されます。がtruenumber3 >= number4number5が >0 の場合、式全体はtrueです。

number3 >= number4 && number5

number3したがって、これはis greater equalnumber4と greater equalかどうかをチェックしませんnumber5。代わりに、書く必要があります

(number3 >= number4) && (number3 >= number5)

と はtruenumber3が実際に等しい場合number4number5です。

于 2013-10-26T19:32:16.533 に答える