我简单的c ++计算器无法正常运行

时间:2019-04-22 12:17:27

标签: c++ if-statement

这应该是一个简单的计算器,可以加,减,乘或除以两个输入到控制台的数字(整数a,b)。  问题可能出在我的if / else statemnts上。即使我在控制台中输入了“ Minus”,“ Multiply”或“ Divide”,该运算符(std :: string运算符)始终设置为“ plus”,因此即使这不是我想要的运算符,也将两个数字相加。

我尝试一起删除[int plus();]函数以查看结果,然后将默认和固定运算符更改为减号。

#include <iostream>
// the problem is probably at [void core();]

std::string operation;
int a;
int b;

class common {
public:
    void print() {
        std::cout << "a: ";
        std::cin >> a;
        std::cout << "b: ";
        std::cin >> b;
    }
};

int plus() {
    common plus1;
    plus1.print();
    int ans = a + b;
    std::cout << "ANS: " << ans << "\n";
    return a + b;
}

int minus() {
    common minus1;
    minus1.print();
    int ans = a - b;
    std::cout << "ANS: " << ans << "\n";
    return a - b;
}

int multiply() {
    common multiply1;
    multiply1.print();
    int ans = a * b;
    std::cout << "ANS: " << ans << "\n";
    return a * b;
}

int divide() {
    common divide1;
    divide1.print();
    int ans = a / b;
    std::cout << "ANS: " << ans << "\n";
    return a / b;
}

void core() {
    std::cout << "\nplus / minus / multiply / divide\n"
        << "operation: ";
    std::cin >> operation;
    if (operation == "plus" or "Plus") {
        plus();
    }
    else if (operation == "minus" or "Minus") {
        minus();
    }
    else if (operation == "multiply" or "Multiply") {
        multiply();
    }
    else if (operation == "divide" or "Divide") {
        divide();
    }
    else {
        std::cout << "Invalid Operation!\n";
    }

}

int main() {
    for (int i = 0; i < 99; i++) {
        core();
    }
}

当我通过以下方式将[std :: string操作]设置为“乘”时 [std :: cin >>操作],我期望[multiply();] 函数被调用,但是无论我设置了什么运算符,都将调用[plus();]函数。

2 个答案:

答案 0 :(得分:1)

您的if语句是错误的。你有

if (operation == "plus" or "Plus") {

您要

if (operation == "plus" or operation == "Plus") {

与其他人相同。

上面的or "Plus"部分始终为true,因为"Plus"在单独使用且如果该指针不是nullptr时被视为指针。不是),则它在布尔上下文中的值为true

答案 1 :(得分:1)

条件operation == "plus" or "Plus"始终为true,因为"Plus"被隐式转换为true

抛开一些不良做法,您想要的是operation == "plus" || operation == "Plus"