C ++在if语句中使用char

时间:2014-08-22 01:20:33

标签: c++ if-statement char

我正在构建一个标准的四功能计算器,而且我遇到了一个令人困惑的错误。

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()类型的值或类似的东西?

3 个答案:

答案 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')

一定会有用。