C++ 多运算符计算器
c++ multiple operators calculator
所以我正在尝试制作一个可以与多个运算符一起使用的计算器。我已经制作了一些可以使用 2 个数字(使用开关)的计算器程序,但是当我尝试使用超过 2 个数字时,我无法真正让它工作。我有一个想法,但我无法实现它(我是编程新手)。这条线不起作用,但这就是我 think: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 个数字是正确的,我必须为第二个运算符创建第二个开关,但我得到了错误的结果..所以我想让第一个代码工作。
你的逻辑是错误的。在第一个 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;
}
但是请注意,这仍然是不正确的,因为如果第一个运算符是 +
或 -
,第二个运算符是 *
或 [=,它会忽略运算顺序16=].
要使第一个代码工作,需要的不仅仅是这个答案,创建一个完整的数学解析器一点也不简单。
所以我正在尝试制作一个可以与多个运算符一起使用的计算器。我已经制作了一些可以使用 2 个数字(使用开关)的计算器程序,但是当我尝试使用超过 2 个数字时,我无法真正让它工作。我有一个想法,但我无法实现它(我是编程新手)。这条线不起作用,但这就是我 think: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 个数字是正确的,我必须为第二个运算符创建第二个开关,但我得到了错误的结果..所以我想让第一个代码工作。
你的逻辑是错误的。在第一个 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;
}
但是请注意,这仍然是不正确的,因为如果第一个运算符是 +
或 -
,第二个运算符是 *
或 [=,它会忽略运算顺序16=].
要使第一个代码工作,需要的不仅仅是这个答案,创建一个完整的数学解析器一点也不简单。