【发布时间】:2016-07-10 01:58:14
【问题描述】:
我正在尝试编写一个后缀计算器,但我一直遇到两个问题 - 第一:当计算器遇到空格时,它会立即退出 第二:当它遇到非运算符/非数字(即z)时,它不会显示我编码的错误消息。
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;
}
这是函数--
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对象时,空格被视为两个值之间的分隔符。见stackoverflow.com/questions/5838711/c-cin-input-with-spaces -
这会导致空间问题 - 37* 9 - 所以 3*7 可以工作,但 -9 不行。此外,如果我尝试说 37*n+,而不是告诉我无效的表达式,它会说无效的大小。
-
试过 getline (cin, exp)。它跳过所有内容并返回到 while 循环。还尝试了 cin.getline(exp, sizeof(exp))。编译器不会让我运行它。它给出了一个错误
-
当我将 exp 转换为 char[100] 时,cin.getline 可以工作,但代码会因断言失败而退出。
标签: c++ calculator postfix-notation