C语言计算器问题,谁来帮我看看哪里出错了?
#include<stdio.h>#include<stdlib.h>
#define MAXSIZE 10
typedef struct
{
float s[10];
int top;
}stack;
//void initstack(stack &st)
//{
// st.top=-1;
//}
float pop(stack &st)
{
st.top--;
return(st.s[st.top+1]);
}
void push (stack &st,float x)
{
st.top++;
st.s[st.top]=x;
}
float top(stack &st)
{
return(st.s[st.top]);
}
int precede (char q1,char q2)//比较运算符的函数
{
int x;
switch(q1)
{
case '+':
case '-':
if (q2=='*'||q2=='/'||q2=='(')
x=-1;
else x=1;
break;
case '*':
case '/':
if(q2=='(')
x=-1;
else
x=1;
break;
case '(':
if(q2=='#')
x=100;
else if(q2==')')
x=0;
else x=1;
break;
case ')':
if(q2=='(')
x=100;
else
x=1;
case '#':
if(q2==')')
x=100;
else if(q2=='#')
x=0;
else
x=-1;
}
return x;
}
float operate (float a,char y,float b)
{
stack f,s;
char q;
float c;
if(precede(y,q)==-1)
{
y=(int)pop(f);
b=pop(s);
a=pop(s);
switch(y)
{
case'+':
c=a+b;
break;
case'-':
c=a-b;
break;
case'*':
c=a*b;
break;
case'/':
c=a/b;
break;
default:
exit(0);
}
return c;
}
}
bool in(char ch)
{
if(ch=='+'||ch=='-'||ch=='*'||ch=='/'||ch=='('||ch==')')
return 1;
else
return 0;
}
int main()
{
stack *f,*s;
char *exp;
char n;
int x;
float op;
float theta;
float a,b;
float adj;
printf("输入:");
scanf("%s",exp);
adj=float('#');
push(*s,adj);
for(;*exp!='\0';exp++)
{
if(in(*exp)==1)
{
switch (precede((char)top(*s),*exp))
{
case -1:
op=*exp;
push(*f,op);
break;
case 0:
op=*exp;
pop(*f);
push(*f,op);
break;
case 1:
theta=pop(*f);
b=pop(*s);
a=pop(*s);
push(*s,operate(a,(char)theta,b));
break;
default:
printf("输入的字符串有误!!!!");
exit(0);
}
}
else
{
n=*exp-'0';
push(*s,n);
}
}
printf("\n结果:%f",pop(*s));
return 0;
}
编译成功,但运行时发送错误信息。。
帮忙看看。。谢谢啦