无法找出我的代码中的逻辑错误

Not able to figure out the logical error in my code

我的代码中存在一些逻辑错误,但我无法弄清楚是什么。当我 运行 我的代码没有给我想要的结果时。

输出:

Enter an infix expression
2+3
2

我得到 2 作为我的后缀表达式,而我应该得到 23+。 请看看是否有人可以帮我解决这个问题。

#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<ctype.h>
#define max 20
int top=-1;
char infix[max],postfix[max],stack[max];
char pop();
int empty();
void push(char );
int precedence(char );
void infix_to_postfix(char * ,char * );

void main()
{
clrscr();
printf("Enter an infix expression\n");
gets(infix);
infix_to_postfix(infix,postfix);
printf("%s",postfix);
getch();
}

void infix_to_postfix(char infix[max],char postfix[max])
{
int i=0,j=0;
char value,x;
for(i=0;infix[i]!='[=11=]';i++)
{
value=infix[i];
if(isalnum(value))
{
postfix[j]=value;
j++;
}
else
{
if(value=='(')
push('(');
else
{
if(value==')')
{
while((x=pop())!='(')
{
postfix[j]=x;
j++;
}
}
else
{
while(precedence(value)<=precedence(stack[top])&&!empty())
{
x=pop();
postfix[j]=x;
j++;
}
push(value);
}
}
}
}

while(!empty())
{
x=pop();
postfix[j]=x;
j++;
}
postfix[j]='[=11=]';
}

void push(char x)
{
if(top==max-1)
printf("stack overflow\n");
else
{
top++;
stack[top]=x;
}
}

char pop()
{
char x;
x=stack[top];
top--;
return x;
}

int empty()
{
if(top==-1)
return(0);
return(1);
}

int precedence(char value)
{
if(value=='(')
return(0);
if(value=='+'||value=='-')
return(1);
if(value=='*'||value=='/'||value=='%')
return(2);
return(3);
}

您需要做的就是更改您的 empty() 功能 您在 if 条件下检查 !empty(),但您 returning 为 0,当它为空时,这将使条件为真,即 Stack 不为​​空。如果堆栈为空,请将 return 值更改为 1。

一般来说,除了 empty() 函数中的 return 值错误外,您的代码逻辑没有问题。
empty()中,当堆栈为空时,它应该是return 1。

  int empty(){
     if(top==-1)
        return(0);  <-- !!! here should return 1
     }  

否则,

  1. 即使堆栈为空,它也会在 while(precedence(value)<=precedence(stack[top])&&!empty()) 处进入 while 循环。
  2. 然后postfix[j] = x可能会写一个冗余的0(现在top=-2)到postfix数组。
  3. 最后,在输入2+3下,postfix[]会变成{'2','[=21=]','3','+',...},导致异常输出2

所以,修改empty()函数后就可以了,比如

int empty()
{
    if(top==-1)
       return(1); // not return(0)
    return(0); 
}

输出:

Enter an infix expression
2+3
23+