c语言+-*/简单计算器中使用do while会出现错误!
程序代码:#include <stdio.h>
#include <malloc.h>
char fh[5]={'+','-','*','/','a'};
int shuzi[6]={-1,1,1,2,2,0};
typedef struct jia
{
char a[100];
int top;
}JIA;
typedef struct shuzi
{
int data[100];
int aop;
}SZ;
void inits(JIA**k)
{
*k=(JIA*)malloc(sizeof(JIA));
(*k)->top=-1;
}
void init(SZ**l)
{
*l=(SZ*)malloc(sizeof(SZ));
(*l)->aop=-1;
}
void push(SZ*l,int t)
{
l->aop++;
l->data[l->aop]=t;
}
void pushs(JIA*k,char t)
{
k->top++;
k->a[k->top]=t;
}
char pups(JIA*l)
{
char a;
a=l->a[l->top];
l->top--;
return a;
}
int pup(SZ*l)
{
int a;
a=l->data[l->aop];
l->aop--;
return a;
}
char dings(JIA*l)
{
char a;
a=l->a[l->top];
return a;
}
int ding(SZ*l)
{
int a;
a=l->data[l->aop];
return a;
}
bool compare(char l)
{
int i;
for(i=0;i<5;i++)
{
if(l==fh[i])
{
return true;
}
}
return false;
}
char pri(char l,char m)
{
int i,a,b;
a=0;
b=0;
for(i=0;i<5;i++)
{
if(l==fh[i])
{
a=i+1;
}
}
for(i=0;i<5;i++)
{
if(m==fh[i])
{
b=i+1;
}
}
if(shuzi[b]>shuzi[a])
{
return '>';
}
if(shuzi[b]<=shuzi[a])
{
return '<';
}
}
int jisuan(int a,char p,int b)
{
int t;
switch(p)
{
case '+':
t=a+b;
break;
case '-':
t=a-b;
break;
case '*':
t=a*b;
break;
case '/':
t=a/b;
break;
}
return t;
}
int mm(void)
{
int a,b,v,t;
char *p,q,*l;
JIA*m;
inits(&m);
SZ*n;
init(&n);
pushs(m,'q');
l=(char*)malloc(sizeof(100));
printf("请输入需要计算的表达式,以a结尾");
gets(l);
p=l;
while(p[0]!='a' || dings(m)!='a')
{
if(!compare(p[0]))
{
t=p[0]-48;
p++;
while(!compare(p[0]))
{
t=t*10+p[0]-48;
p++;
}
push(n,t);
}
else
{
switch(pri(dings(m),p[0]))
{
case '>':
pushs(m,p[0]);
p++;
break;
case '<':
a=pup(n);
b=pup(n);
q=pups(m);
v=jisuan(b,q,a);
push(n,v);
break;
}
}
}
printf("%s=%d\n",l,v);
free(l);
return v;
}
int main(void)
{
do
{
mm();
}while(1);
/*为什么第一次执行是正确的,但是第二春执行的结果就是错的哦?*/
getchar();
return 0;
}个人感觉是内存没有释放,求高手详细解答一下!!!!!!!!!!!!!!!!!!!!!



