具有多个变量的 If 语句

If statements with multiple variables

我正在尝试将 if 语句用于多个比较操作,但 day 变量在我的 if 语句中不起作用。

这是我的代码:

int day;
string rain;

cout << "What day of the week is it?" << endl;
cin >> day;

while (0 < day < 8)
{
    cout << "Is it raining? Please type 'yes' or 'no' " << endl;
    cin >> rain;

    if ((0 < day < 3) && (rain == "yes"))
    cout << "Read in bed" << endl;

    else if ((0 < day < 3) && (rain == "no"))
        cout << "Go out and play!" << endl;

    else if ((2 < day < 8) && (rain == "yes"))
        cout << "Take an umbrella!" << endl;
    else
        cout << "No umberella needed" << endl;

    cout << "What day of the week is it?" << endl;
    cin >> day;
}

cout << "Invalid day sorry" << endl;

获得 Read in bedgo out and play,但从未获得 Take an umbrella

如果我输入 day = 9,我的代码也可以工作。

这与 if 语句和多个变量无关,您的 0 < day < 3 实际上应该读作 0 < day && day < 3。顺便说一句,你不需要在同一个 if 语句的每个分支中测试它,它不太可能改变。

这不是 C++ 的工作方式:

0 < day < 3

你必须改变它

day > 0 && day < 3

您需要使用逻辑 AND (&&) 运算符更正涉及 day 变量的条件。

例如,0 < day < 8 表示您正在针对两个不同的值测试 day,即 day 是否在此范围内。因此,在您的情况下,应使用逻辑运算符和 && 组合这两个比较。因此,应该是这样的:

day > 0 && day < 8

您比较 day 的其他条件也是如此。


有关逻辑运算符的更多详细信息,请参阅参考资料: https://en.cppreference.com/w/cpp/language/operator_logical

使用7 < day && day < 0

一旦你写 0 < day < 3 C++ 计算其中之一然后比较变成 boolean < integer

我觉得您的代码有更好的方法:我可以到达所有端点

    while (true) {

        cout << "What day of the week is it?" << endl;
        cin >> day;

        if (7 < day &&  day < 0 ){
            cout << "Invalid day sorry" << endl;
            break;
        }

        cout << "Is it raining? Please type 'yes' or 'no' " << endl;
        cin >> rain;

        if (0 < day && day < 3) {
            if (rain == "yes") {
                cout << "Read in bed" << endl;
            } else {
                cout << "Go out and play!" << endl;
            }
        } else {
            if (rain == "yes")
                cout << "Take an umbrella!" << endl;
            else
                cout << "No umberella needed" << endl;
        }

    }