if语句中的逻辑运算符

时间:2016-08-24 19:50:16

标签: c++ if-statement char logic

所以我正在编写一个计算器作为c ++的练习,你首先通过输入a,s,m来选择运算符+-*/或d。计算器工作正常,除了我设置的过滤器,如果用户输入的不是a,s,m或d,则会响应错误。过滤器是if语句:

if(Opperator=='a'||'s'||'m'||'d')
    {
        //some code
    }

    else
    {
        //"Operatorfault"
        cout <<"opperatorfeil";
    }

即使&#34;运算符&#34;如果要执行if语句,那么其他char值都会被执行,if语句中的代码仍然会被执行。整个代码如下。输出和变量是挪威语,但我试图在评论中进行翻译。

#include <iostream>

using namespace std;

//The calculator function
int Kalkulator(int IN1, int IN2, char Opperator)
{
    int Svar;

    //Detects witch operator the user choose, and preforms the assigned operation
    if(Opperator=='a')
    {
        Svar=IN1+IN2;
    }

    if(Opperator=='s')
    {
        Svar=IN1-IN2;
    }

    if(Opperator=='m')
    {
        Svar=IN1*IN2;
    }

    if(Opperator=='d')
    {
        Svar=IN1/IN2;
    }

    //Returns the answer
    return Svar;
}

int main()
{
    //Input a, s, m or d for addition, subtraction, multiplication or division, respectively
    cout <<"Skriv \"a\" for addisjon, \"s\" for subtraksjon, \"m\" for multipliksjon, og \"d\" for  divisjon";

    cout <<endl;
    cout <<endl;

    char Opperator;

    cin >>Opperator;
    cout <<endl;

    //Checks if the input is valid
    if(Opperator=='a'||'s'||'m'||'d')
    {
        cout <<"Skriv inn det første tallet du vil gjøre opperasjonen på, trykk derreter enter, og skriv inn det andre";
        cout <<endl;
        cout <<endl;

        int IN1;
        int IN2;

        cin >>IN1;
        cin >>IN2;
        cout <<endl;

        //"The answer is"
        cout << "Svaret er: ";
        //Calls the calculator function, and inputs the values it has gathered, then prints the answer
        cout <<Kalkulator(IN1, IN2, Opperator);
    }

    else
    {
        //"Operatorfault"
        cout <<"opperatorfeil";
    }

    return 0;
}

5 个答案:

答案 0 :(得分:1)

错误发生在你的if语句中。在C ++中,当您将同一个变量与多个值进行比较时,例如,如果opperator是a,m,s,d,则需要为每次比较重新生成变量。

if( Opperator=='a' || Opperator=='s' || Opperator=='m' || Opperator=='d' )

而不是你当前的if语句。

另外,作为提示,在这些情况下,switch语句要好得多,你可以简单地说明

int ans;
switch (customerPackage) {
  case 'a':
    ans = int1 + int2;
  case 's':
    ans = int1 - int2;
  case 'd':
    ans = int1 * int2;
  case 'm':
    ans = int1 / int2;
  default:
    string ans;
    ans = "invalid input";
}
cout <<ans;

答案 1 :(得分:0)

这是错误的:

if(Opperator=='a'||'s'||'m'||'d')

你不能像这样测试相等(或不等)。代码执行相当于

if (Operator == (result of boolean ORs))

您必须单独测试相等性:

if ((op == 'a') || (op == 's') || etc...)

答案 2 :(得分:0)

为什么不这样打破它,

if (Opperator == 'a' || 
    Opperator == 's' ||
    Opperator == 'm' ||
    Opperator == 'd')
{
    // Good values
}
else
{
    // Bad values
}

答案 3 :(得分:0)

if(Opperator=='a'||'s'||'m'||'d')

它检查Opperator是否等于'a',如果不是,那么's'总是返回true,所以所有逻辑都变为真。

您可以使用if声明:

if (Opperator == 'a' || Opperator == 's' || Opperator == 'm' ||  Opperator == 'd') {
    // my calc works well
} else {
    // again my calc works well
} 

或者您可以使用switch

switch(Opperator) {
    case 'a':
    case 's':
    case 'm':
    case 'd': // do normal operation here
              break;
    default:  // error handle
              break;

}

答案 4 :(得分:0)

您必须测试每个char是否相等:

if(Opperator=='a'||Opperator=='s'||Opperator=='m'||Opperator=='d') {
    ...execute
} else {
    ...execute something else
}

如果您想要表现出色,可以使用algorithm::anyOf()

#include <algorithm>

const std::vector<char> validValues{'a','s','m','d'};

if(any_of(validValues.begin(),
          validValues.end(),
          [&](const char &x) { return x == Opperator; }) {
    // good values
} else {
    // bad values
}