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; }个人感觉是内存没有释放,求高手详细解答一下!!!!!!!!!!!!!!!!!!!!!