a33285530 2015-04-19 14:32 采纳率: 0%
浏览 1840
已结题

求助这个程序到底哪里的问题?

#include
#include
#define thestacksize 100
#define stackincrement 10
#define overflow -1
#define ok 1
#define error 0
typedef struct{
char top;
char *base;
int stacksize;
}sqstack;
int initstack(sqstack s){
s.base=(char
)malloc(thestacksize*sizeof(char));
if(!s.base)exit(overflow);
s.top=s.base;
s.stacksize=thestacksize;
return ok;
}
int gettop(sqstack s){
char e;
if(s.top==s.base)return error;
e=*(s.top-1);
return ok;
}
int push(sqstack s,char e){
if(s.top-s.base>=s.stacksize){
s.base=(char*)realloc(s.base,(s.stacksize+stackincrement)*sizeof(char));
if(!s.base)exit(overflow);
s.top=s.base+s.stacksize;
s.stacksize+=stackincrement;
}
s.top++=e;
return ok;
}
int pop(sqstack s,char e){
if(s.top==s.base)return error;
e=
--s.top;
return ok;
}
char precede(char p1,char p2){
char p[7][7] = {{'>', '>', '<', '<', '<', '>', '>'},
{'>', '>', '<', '<', '<', '>', '>'},
{'>', '>', '>', '>', '<', '>', '>'},
{'>', '>', '>', '>', '<', '>', '>'},
{'<', '<', '<', '<', '<', '=', ' '},
{'>', '>', '>', '>', ' ', '>', '>'},
{'<', '<', '<', '<', '<', ' ', '='}};
int r,l;
switch(p1){
case'+':
r=1;
break;
case'-':
r=2;
break;
case'*':
r=3;
break;
case'/':
r=4;
break;
case'(':
r=5;
break;
case')':
r=6;
break;
case'#':
r=7;
break;
default:
break;
}
switch(p2){
case'+':
l=1;
break;
case'-':
l=2;
break;
case'*':
l=3;
break;
case'/':
l=4;
break;
case'(':
l=5;
break;
case')':
l=6;
break;
case'#':
l=7;
break;
default:
break;
}
return (p[r][l]);
}
int ifoptr(char c){
if(c=='+'||c=='-'||c=='*'||c=='/'||c=='('||c==')'||c=='#')return ok;
else return error;
}
int operate(int a,char p,int b){
if(p=='+')return(a+b);
else if(p=='-')return(a-b);
else if(p=='*')return(a*b);
else return(a/b);
}
int evaluateexpression(){
char p,c;
int a,b;
sqstack optr;
sqstack opnd;
initstack(optr);
initstack(opnd);
push(optr,'#');
c=getchar();
while(c!='#'||gettop(optr)!='#'){
if(!ifoptr(c)){push(opnd,c);c=getchar();}
else
switch(precede(gettop(optr),c)){
case'<':
push(optr,c);
c=getchar();
break;
case'=':
pop(optr,p);c=getchar();
break;
case'>':
pop(optr,p);
pop(opnd,a);
pop(opnd,b);
push(opnd,operate(a,p,b));
break;
default:
break;
}
}
return gettop(opnd);
}
int main() {
char e;
printf("input an expression (end with '#'):\n");
e=evaluateexpression();
printf("result:\n");
printf("%d\n",e);
}

表达式求值的程序,编译可以通过,运行后就项目停止运行了,看了很久到底哪里除了问题??求教,谢谢各位了~

  • 写回答

6条回答 默认 最新

  • oyljerry 2015-04-19 14:55
    关注

    直接设置断点,编译器单步跟踪,调试一下。刚好可以提高自己分析能力

    评论

报告相同问题?

悬赏问题

  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料