RPN калькулятор, как обращаться с е?
Я действительно не знаю, как справиться с е. Калькулятор работает для:
3е-3
3e3
Даже когда я пишу:
-е или -е-
калькулятор знает, что это неверный ввод.
Но когда я пишу:
3-е-3 или 3-е3
калькулятор не распознает, что это неверный ввод.
Может кто-то помочь мне, пожалуйста?
Я думаю о написании функции с isdigit
проверить, является ли входная строка цифрой или нет. Но делает isdigit
знать заранее признаки как +
или же -
?
#include <iostream>
#include <stack>
#include <sstream>
using namespace std;
bool isOperator(const string& input);
void performOp(const string& input, stack<double>& RechnerStack);
// Main
int main()
{
cout << "Der UPN Taschenrechner" << endl;
stack<double> RechnerStack;
string input;
while (true)
{
cout << ">>";
cin >> input;
double Zahl;
if (istringstream(input) >> Zahl)
{
RechnerStack.push(Zahl);
}
else if (isOperator(input))
{
performOp(input, RechnerStack);
}
// check for quit
else if (input == "q")
{
return 0;
}
// invalid output
else
{
cout << "Invalid input" << endl;
}
}
}
bool isOperator(const string& input)
{
string ops[] = { "-", "+", "*", "/" }; // string array mit verfügbaren Operatoren
for (int i = 0; i < 4; i++)
{
if (input == ops[i])
{
return true;
}
}
return false;
}
void performOp(const string& input, stack<double>& RechnerStack)
{
double zahl1, zahl2, ergebnis;
zahl2 = RechnerStack.top();
RechnerStack.pop();
zahl1 = RechnerStack.top();
RechnerStack.pop();
if (input == "-")
{
ergebnis = zahl1 - zahl2;
}
else if (input == "+")
{
ergebnis = zahl1 + zahl2;
}
else if (input == "*")
{
ergebnis = zahl1 * zahl2;
}
else
{
ergebnis = zahl1 / zahl2;
}
cout << ergebnis << endl;
RechnerStack.push(ergebnis);
}