#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. Я не знаю. Почему вы все равно выдвигаете нулевой терминатор вперед? Я думаю, что этого не должно быть.