首页 > 解决方案 > 带有逻辑 && 和 || 的 IF 语句 运营商

问题描述

我有以下代码:

if (scanf("%d %d %d", &number1, &number2, &number3) == 3 &&
    ((number1 == rndNumber) || (number2 == rndNumber) || (number3 == rndNumber))) {
    printf("Champ!\n");

} else if ((number1 && number2 > rndNumber) || (number1 && number3 > rndNumber) ||
           (number2 && number3 > rndNumber)) {
    printf("else if!\n");
} else {
    printf("else\n");
}

如果 rndNumber 是例如:10

3个数字的输入是:1, 11, 1 or 1, 1, 11 or 11, 1, 1 or 1, 1, 1

else 语句只会在第三个和第四个输入上执行..我不明白为什么

标签: cif-statementlogical-operators

解决方案


此 if 语句的子语句

} else if ((number1 && number2 > rndNumber) || (number1 && number3 > rndNumber) ||
           (number2 && number3 > rndNumber)) {
    printf("else if!\n");
}

将在 number2 大于 rndNumber 或 number3 大于 rndNumber 时执行,前提是 number1 或 number2 都不等于 0。

对于这个数字

1, 11, 1 or 1, 1, 11

这个条件是有效的。

对于这个数字

11, 1, 1 or 1, 1, 1

条件无效。

考虑到例如这个子条件

(number1 && number2 > rndNumber)

相当于

(number1 != 0 && number2 > rndNumber)

推荐阅读