我正在做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';
}