StevenLu1103 发表于 2018-10-22 18:29:51

灵异事件

本帖最后由 claws0n 于 2018-10-22 18:37 编辑

大佬们好,我最近在学习数据结构,栈的过程中遇到了一个灵异事件。

我用C++写了一个后缀表达式计算器,但计算时,发现加、减、除都没有问题,但用到乘法时发现这玩意算出来是正确答案,但压入栈中的却是错误答案,而且错得好像……

算了,演示一下吧。

输入:25 5 *
输出:5.00
输入:25 2 *
输出:12.50
输入:81 9 *
输出:9.00

代码如下
#include <iostream>
#include <cstdio>
#include <stack>

using namespace std;

typedef string::iterator strit;

double calc(double x, double y, char op)
{
        double result;
        switch (op)
        {
        case '+':
                result = x + y;
                break;
        case '-':
                result = x - y;
                break;
        case '*':
                result = x * y;
        case '/':
                result = x / y;
        }
        return result;
}

int main()
{
        int t;
        string str;
        stack<double> st;
        double a, b, c;
       
        getline(cin, str);
       
        for (strit i = str.begin(); i != str.end(); ++i)
        {
                if (*i >= '0' && *i <= '9')
                {
                        t = 0;
                        for (; *i >= '0' && *i <= '9'; ++i)
                        {
                                t = t * 10 + *i - '0';
                        }
                        i--;
                        st.push((double)t);
                }
                else if(*i == '+' || *i == '-' || *i == '*' || *i == '/')
                {
                        b = st.top();
                        st.pop();
                        a = st.top();
                        st.pop();
                        c = calc(a, b, *i);
                        st.push(c);
                }
        }
        printf("%.2f\n", st.top());
        return 0;
}

望大佬指点,代码写的不好的话也请指出,谢谢

StevenLu1103 发表于 2018-10-22 18:35:59

已经搞定了,switch里面少写了两个break{:10_266:}

西瓜小刚 发表于 2018-10-22 20:59:02

嘿嘿,细心一点

TCY 发表于 2018-10-24 20:48:20

你最好再改进一下,把输入格式改成<操作数1><运算符><操作数2>

StevenLu1103 发表于 2018-10-24 21:09:32

TCY 发表于 2018-10-24 20:48
你最好再改进一下,把输入格式改成

嗯,正准备做

jolin0914 发表于 2018-10-25 21:02:43

细心一点就好啦
页: [1]
查看完整版本: 灵异事件