Ich versuche, einen Postfix-Rechner zu programmieren, aber ich laufe weiter in zwei Ausgaben - zuerst: Wenn der Rechner ein Leerzeichen findet, wird es einfach sofort beendet Sekunde: wenn es einen Nicht-Operator trifft/Nicht-Ziffer (ie-z) zeigt die Fehlermeldung, die ich codiert habe, nicht an.Postfix Notation Rechner
int main()
{
stack <int> calcStack;
string exp;
char ans;
cout << "\nDo you want to use the calculator?" << endl;
cin >> ans;
while (ans == 'y')
{
cout << "\nEnter your exp" << endl;
cin >> exp;
for (int i = 0; i < exp.size(); i++)
{
if (isspace(exp[i]))
{
}
else if (isdigit(exp[i]))
{
int num = exp[i] - '0';
calcStack.push(num);
}
else
doOp(exp[i], calcStack);
}
while (!calcStack.empty())
{
calcStack.pop();
}
cout << "\nDo you want to use the calculator again?" << endl;
cin >> ans;
}
system("pause");
return 0;
}
Dies ist der function--
void doOp(const char & e, stack <int>& myS)
{
if (myS.size() == 2)
{
int num1, num2, answ;
num2 = myS.top();
myS.pop();
num1 = myS.top();
myS.pop();
if (e == '+')
answ = num1 + num2;
else if (e == '-')
answ = num1 - num2;
else if (e == '*')
answ = num1 * num2;
else if (e == '/')
answ = num1/num2;
else if (e == '%')
answ = num1 % num2;
else
cout << "\nError- Invalid operator" << endl;
cout << "\nCalculating..." << endl << answ << endl;
myS.push(answ);
}
else
cout << "\nInvalid stack size- too few, or too many" << endl;
}
Wenn Sie den Debugger arbeitet, und jede Anweisung ausgeführt eins nach dem anderen, welche Aussage hat das Problem verursacht? –
Beachten Sie, dass beim Lesen von Daten aus '' cin'' in ein '' std: string'' Objekt ein Leerzeichen als Trennung zwischen zwei Werten betrachtet wird. Siehe http://stackoverflow.com/questions/5838711/c-cin-input-with-spaces – BrainStone
dies verursacht das Platzproblem-- 37 * 9 - so wird die 3 * 7 funktionieren, aber nicht die -9. Auch wenn ich versuche, 37 * n + zu sagen, anstatt mir einen ungültigen Ausdruck zu geben, heißt das ungültige Größe. –