我试图解决一个后缀表达式,但我不明白为什么会出现运行时错误。
码:
#include<stdio.h>
#include<stdlib.h>
#include<stdlib.h>
struct stack
{
int top;
int n[100];
}s;
void push(int a)
{
s.n[s.top+1]=a;
s.top++;
}
void pop(char a)
{
int c,b;
b=s.n[s.top];
c=s.n[s.top-1];
s.top--;
switch(a)
{
case '+':
s.n[s.top]=b+c;
break;
case '-':
s.n[s.top]=b-c;
break;
case '*':
s.n[s.top]=b*c;
break;
case '/':
s.n[s.top]=b/c;
break;
}
}
int main()
{
s.top=-1;
int m,i,k;
char a[100],c[100];
scanf("%d",&m);
for(i=0;i<m;i++)
{
int j=0;
while(1)
{
scanf("%c",a[j]);
if(a[j]=='?')
break;
else if(a[j]==' ')
{
push(atoi(a));
}
else if(a[j]=='+'||'-'||'*'||'/')
{
pop(a[j]);
}
else
{
j++;
}
}
printf("%d",s.n[s.top]);
}
}
最佳答案
您的代码很难读,但是,我认为,您仍然需要进行更改
scanf("%c",a[j]);
至
scanf(" %c",&a[j]); //note the space before %c, and scanf() expects pointer
对于
&
,因为根据scanf()
签名,它需要用于存储扫描结果的地址。前导空格[
]以停止扫描先前按下的ENTER [\n
]键。请检查
scanf()
的man page了解更多详细信息。另外,正如@LPs先生的回答中所述,如果
push(atoi(a));
不是以空字符结尾的,使用a
是非常危险的。关于c - 谁能找到为什么该程序来解决后缀表达式,从而导致运行时错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28338041/