所以我正在尝试制作一个适用于多个运营商的计算器。我已经制作了一些计算器程序,可以使用2个数字(使用过的开关)但是当我尝试使用2个以上的数字时,我无法真正使它工作。我知道如何做到这一点,但我无法实现它(我是编程的新手)。这条线不起作用,但这就是我的想法:result = a op [0] b op [1] c; 所以这是代码:
// Simple arithmetic calculator.
#include <iostream>
using namespace std;
int main()
{
float a, b, c, result;
char op[2];
// Get numbers and mathematical operator from user input
cin >> a >> op[0] >> b >> op[1] >> c;
result = a op[0] b op[1] c; // result = a + b - c if op[0]=+ and op[1]=-
// Output result
cout << result << endl;
return 0;
}
这是其他代码,但无效
// CalculatorSwitch.cc
// Simple arithmetic calculator using switch() selection.
#include <iostream>
using namespace std;
int main()
{
float a, b, c, result;
char operation,operation2;
// Get numbers and mathematical operator from user input
cin >> a >> operation >> b >> operation2 >> c;
// Character constants are enclosed in single quotes
switch(operation)
{
case '+':
result = a + b;
break;
case '-':
result = a - b;
break;
case '*':
result = a * b;
break;
case '/':
result = a / b;
break;
default:
cout << "Invalid operation. Program terminated." << endl;
return -1;
}
switch(operation2)
{
case '+':
result = b + c;
break;
case '-':
result = b - c;
break;
case '*':
result = b * c;
break;
case '/':
result = b / c;
break;
default:
cout << "Invalid operation. Program terminated." << endl;
return -1;
}
}
所以,如果我使用超过2个数字是正确的,我必须为第二个运算符创建第二个开关,但我得到了错误的结果..所以我想让第一个代码工作。
答案 0 :(得分:0)
你的逻辑错了。在第一个switch语句中设置result = a OP1 b
。在第二个开关中设置result = b OP2 c
,完全覆盖第一个开关所做的事情。相反,你必须使用中间结果,例如将第二个开关更改为
switch(operation2)
{
case '+':
result = result + c;
break;
case '-':
result = result - c;
break;
case '*':
result = result * c;
break;
case '/':
result = result / c;
break;
default:
cout << "Invalid operation. Program terminated." << endl;
return -1;
}
但是请注意,这仍然是错误的,因为如果第一个运算符是+
或-
而第二个运算符是*
或{{1},它会忽略运算的顺序}。
要使第一个代码工作,需要的不仅仅是这个答案,创建一个完整的数学解析器并不是一件容易的事。