我是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变量都有错误,表示该表达式必须具有整数或未整合的枚举类型,我不明白为什么。
答案 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 == '%')
。