C ++中的RPN计算器(CodeBlocks控制台)

时间:2018-06-05 09:48:02

标签: c++ calculator rpn

我正在做RPN计算器主要是为了学习C ++,但是由于我遇到了一些问题,我无法进步......

1 - 与任何RPN计算器一样,每次输入数字时我都不想输入。这应该只发生在第一个,当堆栈为空时。

想象一下,我想要做以下事情: 2 + 3 + 4

在RPN中,应输入为 2 ENTER 3 + 4 +

所以当代码"看到"一个运算符(在这种情况下为+)我不应该点击" ENTER",代码必须为它自己实现。

2 - 我正在使用的转换函数(string2Double),如果字符串包含数字,则工作正常。但是,如果我输入例如。 " abc",它将返回0并且这个数字将被推入堆栈,就像我输入数字0一样,这不是我想要做的。 为了解决这个问题,我尝试使用标志fail()但是我没有成功将结果传递给main函数。

请找到以下代码。

提前致谢, 佩德罗

#include <stdio.h>
#include <sstream>
#include <iostream>
#include <stack>

using namespace std;

// Function Prototypes
void popNum(stack<double>);
double str2Double(string);

int main()
{
  string userIn=""; // User input
  stack<double> mystack;
  double retVal=0;
  stringstream ss;

  cout<<"\nWelcome to the amazing Calculator\n";

  while (userIn!="stop") {      // Exits when userIn is "stop"

    cout<<"\naCalc $ ";
    cin>>userIn;
    ss<<userIn;

    if ((cin.get()=='\n') && (userIn!="stop")){     // Executes only after an "enter" and if different from "stop"

        // Need to convert string to double, before pushing into the stack
        retVal=str2Double(userIn);
        mystack.push(retVal);

        cout<<"\t\t\tSTACK's Content";
        cout<<"\n\t\t\tLast number pushed : "<<retVal<<endl;

        popNum(mystack);
    }
    else{
        // Do nothing;
        cout<<"\nExiting !!!\n";
     }
  }


  return 0;
}

double str2Double(string userIn){
    // Converts a string into a double

    double outValue=0;
    stringstream ss;

    // read user input which is a string
    ss << userIn;

    // write the string read from the input to a double
    ss >> outValue;

    cout << "Return: " << outValue << '\n';

    cout<<"ss flag: "<<ss.fail()<<endl;
    // Return the value read (double type)
    return outValue;
}

void popNum(stack<double> mystack){
  while (!mystack.empty())
  {
     std::cout << "\n\t\t\t"<< mystack.top();
     mystack.pop();
  }
  std::cout << '\n';
}

0 个答案:

没有答案