1

在以下网站中:http: //blockofcodes.blogspot.com/2014/08/postfix-evaluation-using-cpp-stack.html

如果我输入像 1.62 3.5 + 2.7 * 这样的值,则返回值不是十进制值。

我将 int 更改为 double ,但它仍然给我一个错误。谁能给我一个意见?

谢谢!

    #include <stdio.h>
    #include <iostream>
    #include <stdlib.h>
    #include <stack>
    #include <string.h>

   using namespace std;

  bool isOperator(char ch)
 {
  if (ch=='+' || ch=='-' || ch=='*' || ch=='/')
      return true;
  else
      return false;
 }


int performOperation(int op1, int op2, char op)
{
  int ans;
  switch(op){
case '+':
    ans = op2 + op1;
    break;
case '-':
    ans = op2 - op1;
    break;
case '*':
    ans = op2 * op1;
    break;
case '/':
    ans = op2 / op1;
    break;
}
return ans;
 }


  int main()
  {
   char exp[1000], buffer[15];
   int i,op1, op2, len, j, x;
stack<int> s;
printf("Enter a Postfix Expression: ( e.g. 23 34 * )\n");
gets(exp);
len = strlen(exp);
j = 0;
for(i=0; i<len;i++){

    if(exp[i]>='0' && exp[i]<='9'){
        buffer[j++] = exp[i];
    }
    else if(exp[i]==' '){
        if(j>0){
            buffer[j] = '\0';
            x = atoi(buffer);
            s.push(x);
            j = 0;
        }
    }

    else if(isOperator(exp[i])){
        op1 = s.top();
        s.pop();
        op2 = s.top();
        s.pop();
        s.push(performOperation(op1, op2, exp[i]));
    }
}

printf("Answer is %d\n", s.top());

return 0;

}

4

1 回答 1

0

您将操作数存储在整数堆栈上,而不是浮点类型。

更改stack<int> sstack<double> s

此外,op1and op2are also ints 和 should be doubles

我停止了看这一点。确保您正在处理浮点类型。

于 2015-04-10T19:15:57.407 回答