Преобразовать ИНФИКСНОЕ выражение в эквивалентное ПОСТФИКСНОЕ выражение

#c #expression #postfix-mta #infix-notation

#c #выражение #postfix-mta #инфиксная нотация

Вопрос:

Я получаю ошибку «Несоответствие типа в параметре 1 при вызове «push»» в 28-й строке кода в Turbo C , пожалуйста, помогите мне, поскольку я должен отправить свой проект, я знаю, что Turbo C — очень старый компилятор, но это то, что рекомендует наш преподаватель университетатак что я ничего не могу сделать в этом

»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»’

 #include <stdio.h>
#include <conio.h>

int stack[100];
int top = -1;

void in2post(char[]);
void push(int);
int pop();
int prec(char);
int cal(char[]);

void main()
{
    char in[100], post[100];
    clrscr();
    printf("Enter an infix expression:  ");
    gets(in);
    in2post(in);
    getch();
}

void in2post(char in_exp[])
{
    int x = 0, y = 0, z, result = 0;
    char a, c, post_exp[100];
    char t;
    push("");
    t = in_exp[x];
    while (t != '')
    {
        if (isalnum(t))
        {
            post_exp[y] = t;
            y  ;
        }
        else if (t == '(')
        {
            push('(');
        }
        else if (t == ')')
        {
            while (stack[top] != '(')
            {
                c = pop();
                post_exp[y] = c;
                y  ;
            }
            c = pop();
        }
        else
        {
            while (prec(stack[top]) >= prec(t))
            {
                c = pop();
                post_exp[y] = c;
                y  ;
            }
            push(t);
        }
        x  ;
        t = in_exp[x];
    }

    while (top != -1)
    {
        c = pop();
        post_exp[y] = c;
        y  ;
    }
    printf("nThe equivalent postfix expression is: ");

    for (z = 0; z < y; z  )
        printf("%c", post_exp[z]);
    printf("nnDo you want to evaluate the postfix expression? (Y/N):  ");
    scanf("%c", amp;a);

    if (a == 'y' || a == 'y')
    {
        result = cal(post_exp);
        printf("nResult = % dn", result);
        getch();
    }
    else if (a == 'n' || a == 'N')
    {
        exit(0);
    }
}

int cal(char post[])
{
    int m, n, x, y, j = 0, len;
    len = strlen(post);
    while (j < len)
    {
        if (isdigit(post[j]))
        {
            x = post[j] - '0';
            push(x);
        }
        else
        {
            m = pop();
            n = pop();

            switch (post[j])
            {
            case ' ':
                x = n   m;
                break;
            case '-':
                x = n - m;
                break;
            case '*':
                x = n * m;
                break;
            case '/':
                x = n / m;
                break;
            }
            push(x);
 

»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»’

Комментарии:

1. C различает одинарные и двойные кавычки. Здесь вам нужна '' целочисленная константа 0.

2. (Но обратите внимание, что использование '' , значение которого равно 0, может противоречить тому, как вы храните свои однозначные числа: ноль сохраняется как '0' - '0' , что также равно 0.)

3. должен ли я беспокоиться об этом M Oehm?

4. Я не знаю. Почему вы все равно выдвигаете нулевой терминатор вперед? Я думаю, что этого не должно быть.