这应该是一个简单的计算器,可以加,减,乘或除以两个输入到控制台的数字(整数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();]函数。
答案 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"
。