首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在if-statement中使用多个!=和||

在if-statement中使用多个!=和||
EN

Stack Overflow用户
提问于 2019-11-12 12:30:10
回答 2查看 80关注 0票数 1

我在C++中还是个新手,我试图让我的代码在收到的输入(客户)不等于"r“、"R”、"b“或"B”时打印"Invalid customer type“。然后,它再次提示用户输入字母。使用我编写的代码"Invalid customer type“。即使当客户== "r“、"R”、"b“或"B”中的一个字母时,仍然打印出来。我曾尝试将客户转换为char而不是string,但这并没有太大的变化。

代码语言:javascript
复制
#include <iostream>
#include <string>
using namespace std;

int main ()
{
    string customer;
    do
    {
        cout << "Pleas Enter the Customer Type (R for Regular, B for Business): " << endl;
        cin >> customer;
        if ((customer != "r") || (customer != "R") || (customer != "b") || (customer != "B"))
        {
            cout << "Invalid customer type." << endl;
        }

    } while ((customer != "r") || (customer != "R") || (customer != "b") || (customer != "B"));
    return 0;
}
EN

回答 2

Stack Overflow用户

发布于 2019-11-12 12:37:53

使用&&而不是||

代码语言:javascript
复制
#include <iostream>
#include <string>
using namespace std;

int main ()
{
    string customer;
    do
    {
        cout << "Pleas Enter the Customer Type (R for Regular, B for Business): " << endl;
        cin >> customer;
        if ((customer != "r") && (customer != "R") && (customer != "b") && (customer != "B"))
        {
            cout << "Invalid customer type." << endl;
        }

    } while ((customer != "r") && (customer != "R") && (customer != "b") && (customer != "B"));
    return 0;
}

为了简单起见,如果我们只考虑前两个条件

代码语言:javascript
复制
(customer != "r") || (customer != "R")

这些条件之一将始终为真,并且在使用逻辑OR时,如果任意子条件的计算结果为真,则整个条件的计算结果为真。

我们需要使用逻辑AND,这样如果任意子条件为false,则整个条件的计算结果为false。

这有点令人困惑,因为如果您的条件测试的是相等而不是不平等,则会使用||

例如:

代码语言:javascript
复制
if ((customer == "r") || (customer == "R") || (customer == "b") || (customer == "B"))

您还可以重构您的代码,使其更具DRY色彩

代码语言:javascript
复制
int main ()
{
    string customer;
    while(true)
    {
        cout << "Pleas Enter the Customer Type (R for Regular, B for Business): " << endl;
        cin >> customer;
        if ((customer == "r") || (customer == "R") || (customer == "b") || (customer == "B"))
        {
            break;
        }

        cout << "Invalid customer type." << endl;
    } 
}
票数 3
EN

Stack Overflow用户

发布于 2019-11-12 13:10:16

如果客户输入rRbB,则它是有效客户的输入。这意味着有效客户的条件是:

((customer == "r") || (customer == "R") || (customer == "b") || (customer == "B"))

要检查客户的无效性,您必须采用上述条件的logical not,即:

!((customer == "r") || (customer == "R") || (customer == "b") || (customer == "B"))

这将会起作用。但是,您可以将De Morgan's Law应用于此表达式,这将导致:

((customer != "r") && (customer != "R") && (customer != "b") && (customer != "B"))

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58812042

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档