多个 ||在 if 语句中

Multiple || in if statement

本文关键字:语句 多个 if      更新时间:2023-10-16

当我输入"cm"、"m"、"in"或"ft"时,第二个循环总是显示"无效数据"。
我的 OR 语句做错了吗?

#include "standard_lib_facilities.h"
int main()
{
    string unit = "";
    double number = 0;
    int counter = 0;
    bool run = true;
    while (counter < 10){
        cout << "Enter unit: (cm, m, in, ft)"<<endl;
        cin >> unit;
        while (run)
        {
            if (unit != "cm" || unit != "m" || unit != "in" || unit != "ft")
            {
                cout << "invalid data" << endl;
                cin >> unit;
            }
                else
                    run = false;
        }
        cout << "Enter number: ";
        cin >> number;
        cout << number << unit << endl;
        run = true;
        ++counter;
    }
    keep_window_open();
    return 0;
}

unit != "cm" || unit != "m" ...的计算结果将始终true 。如果unit等于"cm",则不等于"m"。您想使用 AND ( && ) 而不是 OR ( || )。

if (unit != "cm" && unit != "m" && unit != "in" && unit != "ft")

>or在这里是错误的操作;如果这些测试中的任何一个失败,它会将输入标记为无效;换句话说,输入必须同时是cmminft,这是不可能的。

您需要and ,以便仅在所有这些测试都失败时才无效。或者,如果你改变测试的意义并检查肯定的"它有效吗?"而不是双重否定的"它不是无效的吗?",可能会不那么令人困惑:

if (unit == "cm" || unit == "m" || unit == "in" || unit == "ft") {
    run = false;
} else {
    // invalid
}

|| 表示"或"。

无论您输入什么,它要么与"cm"不同,要么与"m"不同,

或者与"in"不同,因此无论您输入什么内容都被视为非法。

看看 &&(和)。