我正在构建一个标准的四功能计算器,而且我遇到了一个令人困惑的错误。
char Engine::AskUser(){
char type;
std::cout << "'a'dd, 'm'ulitply, 's'ubract, or 'd'ivide ?\n";
std::cin >> type;
CheckUser(type);
return type;
}
void Engine::CheckUser(char uType){
if(uType != 'a' || uType != 's' || uType != 'm' || uType != 'd'){
std::cout << "Type 'a', 'm', 's', or 'd'\n";
AskUser();
}
else
return;
}
发生的事情是,即使我输入a,s,m或d,if
语句仍然会迭代,好像这些条件是真的,显然不是这种情况。我不明白。 uType是否没有携带AskUser()类型的值或类似的东西?
答案 0 :(得分:8)
if(uType != 'a' || uType != 's' || uType != 'm' || uType != 'd')
char
要么不等于'a'
,要么等于'a'
,在这种情况下它不等于's'
,所以这个条件总是为真
它应该是合乎逻辑的AND:
if(uType != 'a' && uType != 's' && uType != 'm' && uType != 'd')
答案 1 :(得分:0)
你的if条件是进行以下检查:
如果值不等于a - 要么 如果价值不等于s - 要么 如果值不等于m - 要么 如果值不等于d -
无论char变量uType是什么,它始终不会是前4个变量中的至少3个,因此if条件总是会产生一个TRUE值。
编辑:我认为你想做的是以下内容:
if ( (uType == 'a') || (uType == 's') || ......)
{
return;
}
else
{
...//The code you previously had if it were true
}
在这种情况下,只要uType是4个值中的1个,就会返回,否则你将实现你的代码。
答案 2 :(得分:0)
更改此行 -
if(uType != 'a' || uType != 's' || uType != 'm' || uType != 'd')
到此 -
if(uType != 'a' && uType != 's' && uType != 'm' && uType != 'd')
一定会有用。