Я пытаюсь закодировать постфиксный калькулятор, но я продолжаю сталкиваться с двумя проблемами: first: Когда калькулятор сталкивается с пробелом, он просто просто выходит сразу секунд: когда он сталкивается с неоператором/non digit (ie-z), он не отображает сообщение об ошибке, которое я закодировал.Postfix Notation Calculator
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;
}
Это 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;
}
Когда вы использовали отладчик, и выполняется каждый оператор по одному, какое заявление вызвало проблему? –
Имейте в виду, что когда вы читаете данные из '' cin'' в '' std: string'', пространство рассматривается как разделение между двумя значениями. См. Http://stackoverflow.com/questions/5838711/c-cin-input-with-spaces – BrainStone
. Это вызывает проблему пространства - 37 * 9 - так что 3 * 7 будет работать, но не -9. Также, если я попытаюсь сказать 37 * n +, вместо того, чтобы сообщать мне недействительное выражение, он говорит о недопустимом размере. –