gpt4 book ai didi

c - 这是用于计算后缀表达式的 C 代码。我添加了评论来看看我哪里出错了

转载 作者:行者123 更新时间:2023-11-30 19:28:17 27 4
gpt4 key购买 nike

我编写了一个 C 程序来计算后缀表达式。输出是错误的。我在不同的地方添加了打印消息,以查看哪里出错了。结果出现在 for 循环体的第四行或第五行。我不明白为什么会发生这种情况。

 #include <stdio.h>
#include <string.h>

char exp[20];
int stck[15];
int tos = -1;

int isEmpty() {
if (tos == -1)
return 1;
return 0;
}

int isFull() {
if (tos == 9)
return 1;
return 0;
}

int pop() {
if (!(isEmpty()))
return stck[tos--];
else
printf("Underflow\n");
}

void push(int c) {
if (!(isFull()))
stck[++tos] = c;
else
printf("Overflow\n");
}

int isOperator(char c) {
if (c == '+' || c == '-' || c == '/' || c == '%' || c == '*')
return 1;
return 0;
}

main() {
int i, a, b, c;
printf("Enter the expression\n");
gets(exp);
for (i = 0; exp[i] != '\0'; i++) {
printf("Current symbol is %c\n", exp[i]);
if (!(isOperator(exp[i]))) {
push((int) exp[i]);
printf("Pushed %d into the stack\n", stck[tos]);
} else {
b = pop();
a = pop();
printf("Value of a and b are : %d and %d \n", a, b);
if (exp[i] == '+')
c = a + b;
if (exp[i] == '-')
c = a - b;
if (exp[i] == '*')
c = a * b;
if (exp[i] == '/')
c = a / b;
if (exp[i] == '%')
c = a % b;
push(c);
printf("C pushed. top of stack is now %d\n", stck[tos]);
}
}
printf("The value of expression is: %d\n", pop());
}

最佳答案

这里有一个问题。

push((int) exp[i]);

您在此处推送的是 ASCII 值而不是数字。

你想要的是

   push(exp[i]-'0'); // Converts ASCII to digit.

关于c - 这是用于计算后缀表达式的 C 代码。我添加了评论来看看我哪里出错了,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54270290/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com