0

この一連のステートメントでは、次のようになります。

if(robot1Count < 12) {
    robot1Count++;
}
else if(robot1Count < 24) {
    robot1Count++;
}
else if(robot1Count < 36) {
    robot1Count++;
}
else if(robot1Count < 48) {
    robot1Count++;
}
else {
    robot1Count = 0;
}

これが無限ループにあると想像してください。このループは 0 から 48 までトラバースし、0 に変わります。私が疑問に思っているのは、最初のブロックが実行された場合、後続のブロックはすべて無視されるのでしょうか? または、秒を else if(robot1Count < 24 && robot1Count >= 12) に変更する必要がありますか? それともそれは問題ではありませんか?

4

5 に答える 5

7

私が疑問に思っているのは、最初のブロックが実行された場合、後続のブロックはすべて無視されるのでしょうか?

はい、すべて無視されます。条件は評価さえされません。しかし、ご存知のとおり、これは自分でテストできたはずです。

if(robot1Count < 12) {
    printf("< 12");
    robot1Count++;
}
else if(robot1Count < 24) {
    printf(">= 12 && < 24");
    robot1Count++;
}
else if(robot1Count < 36) {
    printf(">= 24 && < 36");
    robot1Count++;
}
else if(robot1Count < 48) {
    printf(">= 36 && < 48");
    robot1Count++;
}
else {
    printf(">= 48");
    robot1Count = 0;
}

そして、どのメッセージがコンソールに出力されるかを見ることができ、何が起こっているのかを知り、感じることができます!

于 2012-04-03T20:17:53.517 に答える
4

これ:

if (cond1)
    stuff1;
else if (cond2)
    stuff2;
else if (cond3)
    stuff3;
else
    stuff4;

これと同じです:

if (cond1) {
    stuff1;
}
else {
    if (cond2) {
        stuff2;
    }
    else {
        if (cond3) {
            stuff3;
        }
        else {
            stuff4;
        }
    }
}
于 2012-04-03T20:19:45.293 に答える
2

はい --ifレッグとステートメントのelseレッグifは相互に排他的です --ifレッグが do not を実行する場合else(およびその逆)。

于 2012-04-03T20:20:25.730 に答える
1

上記のコードが無限ループにある場合

int robot1Count = 0;
while (1 != 2) {

if(robot1Count < 12) {
    robot1Count++;
}
else if(robot1Count < 24) {
    robot1Count++;
}
else if(robot1Count < 36) {
    robot1Count++;
}
else if(robot1Count < 48) {
    robot1Count++;
}
else {
    robot1Count = 0;
}
}

ループでは、これは48に増加し、0に戻ります

ループの1回の実行ごとにrobot1Count++にのみヒットします

于 2012-04-03T20:23:57.410 に答える
1

もちろん、「else if」を「if」に切り替えない限り、それらは無視されます。

于 2012-04-03T20:18:48.807 に答える