c ++多运算符计算器

时间:2015-11-07 20:45:28

标签: c++ calculator operator-keyword

所以我正在尝试制作一个适用于多个运营商的计算器。我已经制作了一些计算器程序,可以使用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个数字是正确的,我必须为第二个运算符创建第二个开关,但我得到了错误的结果..所以我想让第一个代码工作。

1 个答案:

答案 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},它会忽略运算的顺序}。

要使第一个代码工作,需要的不仅仅是这个答案,创建一个完整的数学解析器并不是一件容易的事。