|
5鱼币
先谢谢你们了! 自己调试了好几天了,应该是‘+’,‘-’号里面出栈有问题,可是实在不知道问题在哪!
- //用栈来做一个逆波兰计算器
- #include <stdio.h>
- #include <stdlib.h>
- #include <ctype.h>
- #define NUMBER 100//栈的最大容量
- #define RENUMBER 10//每次动态增容的大小
- typedef char ElemType;
- typedef struct stack
- {
- ElemType *tope;
- ElemType *base;
- int MAXSIZE;//用来存储栈的最大容量
- }sqstack;
- void initstack(sqstack *s)//初始化栈
- {
- s->base = (ElemType *)malloc(sizeof(ElemType) * NUMBER);
- if(!(s->base))
- {
- return ;
- }
- s->tope = s->base;
- s->MAXSIZE = NUMBER;
- }
- void push(sqstack *s,int e)//进栈
- {
- //如果栈满了,就对栈进行一个动态增容
- if(s->tope - s->base >= s->MAXSIZE)
- {
- s->base = (ElemType *)realloc(s->base , sizeof(ElemType) * (RENUMBER + NUMBER));
- if(!s->base)
- {
- return;
- }
- s->tope = s->base + s->MAXSIZE;
- s->MAXSIZE = NUMBER + RENUMBER;
- }
- *(s->tope) = e;
- s->tope++;
- }
- void pop (sqstack *s , int *e)//出栈
- {
- if (s->tope == s->base)
- {
- printf("错误 : 栈已经为空\n");
- return;
- }
- --(s->tope);
- *e = *(s->tope);
- }
- void clearstack(sqstack *s)
- {
- s->tope = s->base;
- }
- int main ()
- {
- char c;
- int i = 0 ;
- double d = 0 ;double m= 0;
- char temp[10] = {0};
- sqstack s;
- initstack(&s);
- printf("请输入你想要输入的表达式 (数据和运算符之间用空格隔开,输入#表示结束!): \n");
- scanf("%c",&c);
- while (c != '#')
- {
- while( isdigit(c) || c == '.')//过滤数字
- {
- temp[i++] = c;
- temp[i] = '\0';
- if( i >= 10)
- {
- printf("出错 : 一次性输入的数据过大!\n");
- return -1;
- }
- scanf("%c",&c);//这个scanf保证你输入各位以上的数字的时候能
- if(c == ' ')
- {
- d = atof(temp);
- push(&s,d);
- i = 0;
- break;
- }
- }
- switch (c)
- {
- case '+':
- pop(&s,&m);
- pop(&s,&d);
- push(&s,d+m);
- break;
- case '-':
- pop(&s,&m);
- pop(&s,&d);
- push(&s,d-m);
- break;
- case '*':
- pop(&s,&m);
- pop(&s,&d);
- push(&s,d*m);
- break;
- case '/':
- pop(&s,&m);
- pop(&s,&d);
- if(m == 0)
- {
- printf("错误 : 除数不能为零!\n");
- return -1;
- }
- push(&s,d/m);
- break;
- }
- scanf("%c",&c);
- }
- pop (&s,&d);
- printf("%f",d);
- return 0;
- }
复制代码
|
-
最佳答案
查看完整内容
我用vs2008 你的代码我黏贴后编译器都通不过,我看了下不是 加号减号的pop问题 是你的pop push 的参数类型不对,你把你一个浮点型的数据压入到int类型里,本身就失去了小数点后面的位数,然后你又把int类型pop成浮点类型,本身逻辑错误,这个不是问题的最关键,最关键是 定义sqstack结构的 成员是 char指针类型, 也就是说你把一个浮点型的数据 push 到一个int类型的变量 然后再试图存入一个char类型指针变量中,我不是高手, 高 ...
|