|
此函数用于确定运算符的优先级:
#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--];
}
我在这个程序中遇到运行时错误。我不知道为什么。您可以向我建议我可以实施的任何变更吗?在某些编译器中,我将输出视为无限循环。
答案 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
都未发生变化,因此比较结果将为真。换句话说 - 一个无限循环。