我在C++中还是个新手,我试图让我的代码在收到的输入(客户)不等于"r“、"R”、"b“或"B”时打印"Invalid customer type“。然后,它再次提示用户输入字母。使用我编写的代码"Invalid customer type“。即使当客户== "r“、"R”、"b“或"B”中的一个字母时,仍然打印出来。我曾尝试将客户转换为char而不是string,但这并没有太大的变化。
#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;
}发布于 2019-11-12 12:37:53
使用&&而不是||
#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;
}为了简单起见,如果我们只考虑前两个条件
(customer != "r") || (customer != "R")这些条件之一将始终为真,并且在使用逻辑OR时,如果任意子条件的计算结果为真,则整个条件的计算结果为真。
我们需要使用逻辑AND,这样如果任意子条件为false,则整个条件的计算结果为false。
这有点令人困惑,因为如果您的条件测试的是相等而不是不平等,则会使用||。
例如:
if ((customer == "r") || (customer == "R") || (customer == "b") || (customer == "B"))您还可以重构您的代码,使其更具DRY色彩
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;
}
}发布于 2019-11-12 13:10:16
如果客户输入r、R、b或B,则它是有效客户的输入。这意味着有效客户的条件是:
((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"))
https://stackoverflow.com/questions/58812042
复制相似问题