首页 > 解决方案 > 布尔变量在 if else 比较器中共享相同值的问题

问题描述

我正在尝试制作一个包含 6 个(包括教程)任务的游戏。有 6 个布尔变量,每个任务一个。if else 比较器检查哪些变量是正确的,并将您发送到适当的任务。如果只有 1 个变量为真,比较器就可以很好地工作,但如果多个变量为真,则它比不为真。这是呈现相同错误的代码的更简化版本。

#include <stdio.h>
#include <stdbool.h> 

int main()
{
bool tutorial = true;
bool mission1 = true;
bool mission2 = true;

if (tutorial) {
    printf("It does not work");
}
else if (tutorial, mission1) {
    printf("It does work");
}
else {
    printf("It doesn't work");
}
}

应该发生的是程序打印出“它确实有效”。相反,它会打印出“它不起作用”。虽然我知道如果我只想让程序打印中间选项,我会放

#include <stdio.h>
#include <stdbool.h> 

int main()
{
bool tutorial = true;
bool mission1 = true;
bool mission2 = true;

if (tutorial, mission1) {
    printf("It does not work");
}

}

这也会阻止你玩超过 1 个任务。请帮忙。

标签: cif-statementboolean

解决方案


该声明if (tutorial, mission1)并不意味着您认为它意味着什么。在这个语句中,tutorial, mission1是一个逗号表达式。

逗号表达式的求值是通过评估逗号左边的内容,丢弃结果,然后评估共同点右边的内容。

所以你评估tutorial,扔掉结果,然后评估mission1。因此,结果与您刚刚编写if (mission1)的 .

您的意思可能是if (tutorial && mission1)if (tutorial || mission1)


推荐阅读