RPN калькулятор на C ++ (консоль CodeBlocks)

Я делаю калькулятор RPN в основном для изучения C ++, но я не могу прогрессировать, потому что у меня есть некоторые проблемы …

1 — Как и в любом другом калькуляторе RPN, я не хочу нажимать ввод каждый раз, когда набираю число. Это должно произойти только для первого, когда стек пуст.

Представьте, что я хочу сделать следующее:
2 + 3 + 4

В RPN это должно быть введено как
2 ENTER
3 +
4 +

Поэтому, когда код «видит» оператор (+ в данном случае), мне не нужно нажимать «ВВОД», код должен понимать это для себя.

2 — Функция преобразования, которую я использую (string2Double), работает нормально, если строка содержит число. Однако, если я войду, например. «abc», он вернет 0, и это число будет помещено в стек, как если бы я ввел число 0, что я не хочу делать.
Чтобы преодолеть это, я попытался использовать флаг fail (), но у меня не получилось передать результат в основную функцию.

Пожалуйста, найдите код ниже.

Заранее спасибо,
Pedro

#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

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]