C 波兰后缀符号不计算,始终显示';0';结果
我正在研究一个基于堆栈的波兰符号计算器,它读取中缀表达式,验证括号是否正确,将其转换为后缀,然后计算最终结果。但我在求值部分遇到了一些问题,代码跳过了整个“while”循环(我向其中添加了一些printf,以确定它停止工作的确切位置),并且始终将最终结果显示为“0” 这是我的数据结构研究。一切似乎都很好,但评估部分。我尝试过添加一些变量,但没有成功C 波兰后缀符号不计算,始终显示';0';结果,c,stack,postfix-notation,C,Stack,Postfix Notation,我正在研究一个基于堆栈的波兰符号计算器,它读取中缀表达式,验证括号是否正确,将其转换为后缀,然后计算最终结果。但我在求值部分遇到了一些问题,代码跳过了整个“while”循环(我向其中添加了一些printf,以确定它停止工作的确切位置),并且始终将最终结果显示为“0” 这是我的数据结构研究。一切似乎都很好,但评估部分。我尝试过添加一些变量,但没有成功 void postfix(){ int i = 0, op1, op2; char ch; int p =-1; c
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”。与您的问题无关,但对于
scanf
格式说明符%s
需要指向第一个字符或数组的指针,类型为char*
。在您的情况下,这将是&exp[0]
(这就是普通exp
本身衰减的结果)。表达式&exp
是指向数组本身的指针,其类型为char(*)[20]
,在语义上与预期的非常不同。至于您的问题,现在似乎是一个非常好的时机。还有一个一般提示:停止使用全局变量!如果需要多个函数来访问某个对象,请将其作为参数传递。如果你想让一个函数返回一些东西,让它实际返回它。最后,请阅读,以及。请学习如何创建一个来向我们展示。哦,还有一个关于问题可能原因的最后提示:您有多少名为p
的变量?它们是如何关联的(如果有关联的话)?与您的问题无关,但对于scanf
格式说明符“%s”
需要指向第一个字符或类型为char*
的数组的指针。在您的情况下,这将是&exp[0]
(这就是普通exp
本身衰减的结果)。表达式&exp
是指向数组本身的指针,其类型为char(*)[20]
,在语义上与预期的非常不同。至于您的问题,现在似乎是一个非常好的时机。还有一个一般提示:停止使用全局变量!如果需要多个函数来访问某个对象,请将其作为参数传递。如果你想让一个函数返回一些东西,让它实际返回它。最后,请阅读,以及。请学习如何创建一个来向我们展示。哦,还有一个关于问题可能原因的最后提示:您有多少名为p
的变量?它们是如何关联的(如果有关联的话)?