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分支执行else不执行(反之亦然)。

于 2012-04-03T20:20:25.730 回答
1

当然它们会被忽略,除非您将“else if”切换为“if”

于 2012-04-03T20:18:48.807 回答
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

每次执行循环时,它只会命中 robots1Count++

于 2012-04-03T20:23:57.410 回答