这个在CS中将中缀转换为后缀的程序给出了运行时错误。为什么?

时间:2017-04-03 06:54:21

标签: c stack postfix-notation infix-notation

|

此函数用于确定运算符的优先级:

#include <stdio.h>
#include <ctype.h>

char stack[50];
int top=-1;

void push(char x)
{
    stack[++top]=x;
}

char pop()
{
    if(top==-1)
        return -1;
    else
        return stack[top--];
}

我在这个程序中遇到运行时错误。我不知道为什么。您可以向我建议我可以实施的任何变更吗?在某些编译器中,我将输出视为无限循环。

1 个答案:

答案 0 :(得分:0)

第一次执行此代码

Enable client access token flow

while(priority(stack[top])>=priority(*e)) 的值为top,因此您可以访问-1。这不是合法访问,您的程序可能会崩溃。

如果程序没有崩溃,您将获得一些传递给stack[-1]的“随机”值。现在,将此“随机”字符的优先级与输入的第一个字符的优先级进行比较。让我们假设比较结果为真。然后执行:

priority

由于printf("%c",pop()); top-1函数不会更改pop,因此它会保留在top。然后你再做一次:

-1

由于while(priority(stack[top])>=priority(*e)) top都未发生变化,因此比较结果将为真。换句话说 - 一个无限循环。