在编译以下程序时,我遇到了分段错误(核心转储)。
我正在使用MinGW编译器进行编译。
程序应该以字符串的形式接受有效的POSTFIX表达式,然后从左到右遍历整个字符串并对其进行评估。它应该将结果发送回main(),然后显示在控制台上。
#include "stdio.h"
#include "stdlib.h"
typedef enum {plus,minus,mul,divide,mod,eos,opnd} precedence;
int evaluate(char postfix[]);
precedence get_token();
void push(int number,int *top, int stk[]);
int pop(int *top,int stk[]);
int operation(int op1, int op2, precedence token);
int main(){
char postfix[10];
printf("Enter a valid POSTFIX EXPRESSION\n");
scanf("%s",postfix);
puts(postfix);
printf("\n The result of the expression is %d ",evaluate(postfix));
return 0;
}
precedence get_token(char *symbol, int *n, char postfix[]){
*symbol = postfix[*n++];
switch(*symbol){
case '+': return plus;
break;
case '-': return minus;
break;
case '*': return mul;
break;
case '/': return divide;
break;
case '%': return mod;
break;
case '\0':return eos;
break;
default :return opnd;
break;
}//end of switch
}//end of get_token()
int evaluate(char postfix[]){
int stk[10], res,top=-1,n=0,op1,op2,result;
char symbol;
precedence token= get_token(&symbol,&n, postfix);
while(token!=eos){
if(token==opnd){
push(symbol-'0',&top,stk);
}
else{
op2= pop(&top,stk);
op1=pop(&top,stk);
result=operation(op1,op2,token);
push(result,&top,stk);
}//end of else
token=get_token(&symbol,&n,postfix);
}//end of while
res=pop(&top,stk);
return res;
}//end of evaluate()
void push(int number, int *top, int stk[]){
stk[++(*top)]=number;
}
int pop(int *top, int stk[]){
return stk[(*top)--];
}
int operation(int op1, int op2, precedence token){
switch(token){
case plus: return op1+op2;
case minus: return op1-op2;
case mul: return op1*op2;
case divide: return op1/op2;
case mod: return op1%op2;
}//end of switch
}// end of operation()