鱼C论坛

 找回密码
 立即注册
查看: 2946|回复: 9

逆波兰表达式哪里错了

[复制链接]
发表于 2018-4-24 20:31:55 From FishC Mobile | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 幽梦三影 于 2018-4-24 22:20 编辑

//逆波兰表达式
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#include<ctype.h>
#define stack_int_size 20
#define expand 10
typedef double elemtype;
typedef struct
{
        elemtype *top;
        elemtype *base;
        int stacksize;
}
stack;
//创建一个栈
void creatstack(stack* s)
{
        s->base=(elemtype*)malloc(stack_int_size*sizeof(elemtype));
        if(!(s->base))
                exit(0);
        s->top=s->base;
        s->stacksize=stack_int_size;
}
//插入操作
void push(stack* s,elemtype e)
{
        if(s->top-s->base>=s->stacksize)
                s->base=(elemtype*)realloc(s->base,(s->stacksize+expand)*sizeof(elemtype));
        if(!(s->base))
                exit(0);
        s->top=s->base+s->stacksize;
        s->stacksize=s->stacksize+expand;
        *(s->top)=e;
        s->top++;
}
//删除操作
void pop(stack* s,elemtype e)
{
        if(s->top==s->base)
                printf("空栈!");
        return;
        --(s->top);
        e=*(s->top)
}
int main()
{
        stack s;
        int i=0;
        char c,m[stack_int_size];
        //m为缓冲区,存放输入的字符
        double d,e,f,l;//用于暂时存放输入的数据,并进行相互运算
        creatstack(&s);
        printf("请输入逆波兰算数式:\n");
        scanf("%c",&c);
        while(c!='#') //用#作为结束
        {
                while(isdigit(c)||c=='.')
                {
                        m[i++]=c;
                        m='\0';
                        //这是什么用啊?
                        scanf("%c",&c);
                        if(c==' ') //用空格终止一次循环,在外层while循环结尾再输入c再次进入循环
                        {
                                f=atof(m);//把m缓冲区中的小数字符转换成double型
                                push(&s,f);
                                i=0;
                                break;
                        }
                }
                switch(c)
                {
                case '+':
                        pop(&s,d);
                        pop(&s,e);
                        push(&s,d+e);
                        break;
                case '-':
                        pop(&s,d);
                        pop(&s,e);
                        push(&s,e-d);
                        break;
                case '*':
                        pop(&s,d);
                        pop(&s,e);
                        push(&s,d*e);
                        break;
                case '/':
                        pop(&s,d);
                        pop(&s,e);
                        if(e==0) //分母不为0
                        {
                                printf("error\n");
                                return -1;
                        } else
                        push(&s,e/d);
                        break;
                }
                scanf("%c",&c);
        }
        pop(&s,l);
        printf("\n%lf\n",l);
        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-4-27 01:20:34 | 显示全部楼层
m是个数组,你直接赋值了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-4-28 13:52:37 From FishC Mobile | 显示全部楼层
本帖最后由 幽梦三影 于 2018-4-28 13:54 编辑
ABC23 发表于 2018-4-27 01:20
m是个数组,你直接赋值了


改过来了
1 2 +运行后得2啊

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-30 11:10:11 | 显示全部楼层
幽梦三影 发表于 2018-4-28 13:52
改过来了
1 2 +运行后得2啊

我也是这样的,总感觉小甲鱼哪里不对
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-30 12:01:56 | 显示全部楼层
无标题.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-23 10:05:11 | 显示全部楼层
幽梦三影 发表于 2018-4-28 13:52
改过来了
1 2 +运行后得2啊

它的返回值始终是最后输入的那个数字,但是小甲鱼自己运行就没问题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-26 15:47:59 From FishC Mobile | 显示全部楼层
HelloLife 发表于 2020-4-23 10:05
它的返回值始终是最后输入的那个数字,但是小甲鱼自己运行就没问题

为什么小甲鱼自己运行是对的,我们是出错的,我照的他的代码敲的,运行之后输之后就错了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-26 17:01:05 | 显示全部楼层
猪敏 发表于 2020-4-26 15:47
为什么小甲鱼自己运行是对的,我们是出错的,我照的他的代码敲的,运行之后输之后就错了

typedef double ElemType;你们看一下是不是这里的数据类型没改
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-26 21:19:19 From FishC Mobile | 显示全部楼层
HelloLife 发表于 2020-4-26 17:01
typedef double ElemType;你们看一下是不是这里的数据类型没改

不应该是double吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-27 16:03:40 | 显示全部楼层
猪敏 发表于 2020-4-26 21:19
不应该是double吗

就是double
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-3-29 15:44

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表