【问题标题】:Simple Reverse Polish Calculator简单的逆波兰计算器
【发布时间】:2023-12-08 06:46:01
【问题描述】:

我无法弄清楚如何存储用户输入的运算符。我认为我的第 36 行是导致我的问题的原因,但不确定会发生什么(我确定您可以从代码中看到,但我不能;))是我到达第 35 行并进行操作以用于整数并按 Enter 没有任何反应然后我输入任何 2 个字母数字字符按 Enter,然后没有任何内容然后 2 个字母数字并输入然后它吐出我的答案。我知道这可能是我很容易错过的事情。

另外,在我让这部分工作之后,我想添加一个“do while”循环,让用户继续使用选择的任何运算符,直到 iValue1 !=0

最后,防止用户使用“if”cin.fail 除以 0 的最简单方法是什么?如果是这样,我的第一个“if”语句会这样吗?

*Edit: Line 35 = "cout

#include <iostream>
using namespace std;

int main()
{
    float iValue1, iValue2, iValue3;

    char chOperator1 = '/';     //Initializing operators
    char chOperator2 = '*';
    char chOperator3 = '+';
    char chOperator4 = '-';

    //Get user inputs
    cout  << "Enter the first value as an integer: ";
    cin   >> iValue1;
    cout  << "Enter the Second value as an integer: ";
    cin   >> iValue2;
    cout  << "Enter the operation you want to perform: ";
    cin   >> chOperator1 >> chOperator2 >> chOperator3 >> chOperator4;


    if( chOperator1 == '/')
    {
        iValue3 = iValue1 / iValue2;
    }
    else {
        if(chOperator2 == '*')
        iValue3 = iValue1 * iValue2;
        (chOperator3 == '+');
        iValue3 = iValue1 + iValue2;
        (chOperator4 == '-');
        iValue3 = iValue1 - iValue2;
    }

    cout  << "The result is \n " << iValue3;    
    return 0;
}

【问题讨论】:

  • 我们没有行号。但是你需要在你的条件前面加上一个else if,而不是用;结束它们
  • 程序行为的描述与您的代码相匹配:您要求等待处理,直到您输入 4 个字符,然后程序继续执行其中一个字符 - 如果您输入的第一个字符是不是 '/'。这可能不是您想要的,但该程序需要完全重写,而且很容易在谷歌上搜索“C++ 中的反向润色”,因为这很常见。
  • @clcto: 所以你说我需要在我的 if 前面放一个else if 并删除我嵌入的ifelse? @gnometorule:那么我将如何实现程序以接受并识别用户输入的char 并查看我的条件以提示正确操作?
  • 投票结束,RPN计算器问题太多:*.com/search?q=c%2B%2B+rpn+calculator
  • 我建议您使用调试器单步执行每个语句,以找出您的逻辑失败的地方。您可以发布一个问题,并附上行号或指示您对逻辑有问题的地方。

标签: c++ calculator postfix-notation


【解决方案1】:

我建议您使用数组或 std::vector 进行多个操作:

char operations[4];
cout >> "Enter 4 operations: ";  
for (unsigned int i = 0; i < 4; ++i)
{
  cin >> operation[i];
}

for (unsigned int j = 0; j < 4; ++j)
{
  const char opr = operation[j];
  switch (j)
  {
    case '*':
      cout << (iValue1 * iValue2) << "\n";
      break;
    case '/':
      cout << (iValue1 / iValue2) << "\n";
      break;
    case '+':
      cout << (iValue1 + iValue2) << "\n";
      break;
    case '-':
      cout << (iValue1 - iValue2) << "\n";
      break;
    default:
      cout << "Invalid operation, '" << oper << "'\n";
      break;
    }
  }

【讨论】: