多个||在if语句中

时间:2014-12-12 11:44:20

标签: c++

第二个循环始终显示"无效数据"当我输入" 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;
}

3 个答案:

答案 0 :(得分:5)

unit != "cm" || unit != "m" ... 始终评估为true。如果unit等于“cm”,则它不等于“m”。您想使用AND(&&)而不是OR(||)。

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

答案 1 :(得分:1)

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

您想要and,以便只有在这些测试的所有失败时它才会无效。或者,如果你改变测试的意义并检查一个积极的&#34;它是否有效,它可能不那么令人困惑?&#34;而不是双重否定&#34;它不是无效的吗?&#34;:

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

答案 2 :(得分:-2)

||意思是“或”。

无论你输入什么,它都会与“cm”不同,或者与“m”不同,或者与“in”不同,所以你输入的内容都被认为是非法的。

看看&amp;&amp; (和)。