C ++基本计算器

时间:2017-09-20 19:56:22

标签: c++

我是C ++和一般编程的新手。我被分配为我的C ++课程制作一个计算器,这是我到目前为止所做的。

#include <iostream>;
#include <iomanip>;
using namespace std;
int main() {
    double x,y;
    char op;
    cout << "Enter Expression:";
    cin >> x >> op >> y;
    if (op = '+')
    {
        cout << "Result:" << x + y << endl;
    }
    else if (op = '-') {
        cout << "Result:" << x - y << endl;
    }
    else if (op = '*') {
        cout << "Result:" << x*y << endl;
    }
    else if (op = '/') {
        cout << "Result:" << x / y << endl;
    }
    else if (op = '%') {
        cout << "Result:" << x % y << endl; // <--- line 23
    }
    else {
        return 0;
    }
}

第23行的x和y变量都有错误,表示该表达式必须具有整数或未整合的枚举类型,我不明白为什么。

4 个答案:

答案 0 :(得分:1)

您使用%表示double,它仅用于整数。 如果要为double使用相同的功能。你可以使用fmod()

double z = fmod(x,y);

您应该将代码修改为

 #include <iostream>;
 #include <iomanip>;
 using namespace std;
 int main() {
    double x,y;
    char op;
    cout << "Enter Expression:";
    cin >> x >> op >> y;
            if (op == '+')
        {
            cout << "Result:" << x + y << endl;
        }
            else if (op == '-') {
            cout << "Result:" << x - y << endl;
        }
            else if (op == '*') {
            cout << "Result:" << x*y << endl;
        }
            else if (op == '/') {
            cout << "Result:" << x / y << endl;
        }
            else if (op == '%') {
            cout << "Result:" << fmode(x,y) << endl;
        }
            else{
            return 0;
    }
}

答案 1 :(得分:1)

%操作仅针对整数值定义。你不能将它用于双打。你也有一个典型的新手错误:在C ++ operator =中,赋值运算符a = b意味着获取b值并将其放入。但operator ==是比较运算符,a == b表示a同等b返回true。如果您想比较值,请使用==,而不是=

答案 2 :(得分:1)

浮点除法没有余数。 2.5 % 1.2的结果应该是什么?

你可以使用int来解决这个问题:

    else if (op == '%') {
        cout << "Result:" << (int)x % (int)y << endl;
    }

但请注意,当用户输入2.5 % 1.2时,这会显示2 % 1的结果。

PS:另请注意,在=(比较)条件下,您有==(作业)。

答案 3 :(得分:0)

余数运算符%不适用于double类型的操作数(例如,参见cppreference.com/Multiplicative operators):

  

对于内置运算符%,lhs和rhs必须都有积分或   unscoped枚举类型

您可以改为编写static_cast<int>(x)%static_cast<int>(y)

此外,请注意=是赋值运算符;用于比较(如在if (op = '%')的情况下),使用等于运算符==,即if (op == '%')