我试图解决一个后缀表达式,但我不明白为什么会出现运行时错误。
码:

#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/

10-13 08:43