Я изучаю калькулятор польских обозначений на основе стека, который читает инфиксное выражение, проверяет правильность скобок, преобразует его в постфикс и затем оценивает его для конечного результата.Но у меня есть некоторые проблемы с оценочной частью, код пропускает весь цикл while (я добавил к нему несколько printf, чтобы точно определить, где он перестает работать), и всегда показывает конечный результат как '0'.
Это для моих исследований структуры данных.Кажется, все работает нормально, но оценка часть.Я попытался добавить некоторые переменные, но это не сработало.
void postfix(){
int i = 0, op1, op2;
char ch;
int p =-1;
char exp[20];
char *e, x;
e = exp;
printf("Input the expression again: ");
scanf("%s", &exp);
printf("\nThe postfix expression is: ");
while(*e != 0){
if(isalnum(*e)){
printf("%c",*e);
post[++p]=*e;
} else if(*e == '(')
push(*e);
else if(*e == ')'){
while((x = pop()) != '('){
printf("%c", x);
post[++p]=x;
}
} else{
while(priority(pilha[top]) >= priority(*e)){
char a;
a= pop();
printf("%c",a);
post[++p]=a;
}
push(*e);
}
e++;
}
while(top != -1){
char avaliada;
avaliada = pop();
printf("%c",avaliada);
post[++p] = avaliada;
}
}
void evaluation(){
int i = 0, op1, op2;
char ch;
int p =-1;
char exp[20];
char *e, x;
e = exp;
postfix();
while(i != (p+1)){
ch=post[i];
i++;
if(isdigit(ch)){
xpush(ch - '0');
} else{
op2=xpop();
op1=xpop();
switch(ch){
case '+':xpush(op1+op2);break;
case '-':xpush(op1-op2);break;
case '*':xpush(op1*op2);break;
case '/':xpush(op1/op2);break;
}
}
printf("\n\nResult: %d\n",s[xtop]);
}
Например, если я ввожу выражение «2-1» в консоли, я ожидаю, что он покажет запись постфикса, котораябудет '21 - ', а вычисленный результат будет равен' 1 ', но фактический результат равен' 0 '.