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=].

要使第一个代码工作,需要的不仅仅是这个答案,创建一个完整的数学解析器一点也不简单。