第二个循环始终显示"无效数据"当我输入" 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;
}
答案 0 :(得分:5)
unit != "cm" || unit != "m" ...
始终评估为true
。如果unit
等于“cm”,则它不等于“m”。您想使用AND(&&
)而不是OR(||
)。
if (unit != "cm" && unit != "m" && unit != "in" && unit != "ft")
答案 1 :(得分:1)
or
是错误的操作;如果任何的那些测试失败,它会将输入标记为无效;换句话说,输入必须同时是cm
,m
,in
和ft
的全部,这是不可能的。
您想要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; (和)。