我制作了一个计算后缀方程的程序,但是进入while
循环时出现了问题,我不知道为什么。
我试图查看问题出在哪里,所以我在每个步骤上都添加了printf
语句以查找问题。我的指针t
获取表exp
中第一个地址的值。这是出问题的地方。
在进入while
循环之前,要查看*t
是否包含数字,该值符合预期。进入循环后,它变成随机数,但由于我不知道的原因,总是以值-1结尾,这弄乱了我的整个程序。我在做什么错了?
#include "MyStack.h"
int main(){
int i = 0, *t, exp[N], stack[N];
char c;
int n1, n2, obj;
printf ("Give postfix formula for evaluation:");
while((c = getchar()) != '\n'){
exp[i] = c - 48;
printf("%d\n", exp[i]);
i++;
}
t = exp;
printf("\nValue of pointer t %d\n",*t);
while(*t != '\n'){
printf("\nValue of pointer t after entering the loop %d\n",*t);
if(isdigit(*t)){
obj = *t - 48;
printf("%d\n", obj);
push(stack, t, obj);
}
else{
n1 = pop(stack, t);
n2 = pop(stack, t);
switch(*t){
case '+': push(stack, t, n1 + n2); break;
case '-': push(stack, t, n1 - n2); break;
case '*': push(stack, t, n1 * n2); break;
case '/': {
if(n1 == 0){
printf("Division with 0 is not eligible\n");
break;
}
else push(stack, t, n2 / n1); break;
}
}
}
}
for (i=0;i<N;i++)
printf ("%d\n",exp[i]);
printf("\nThe result of expression %s = %d\n\n",exp,pop(stack, t));
return 0;
}
void push(int stack [], int *t, int obj)
{
if ((*t) == (N - 1))
{
printf("Stack overflow...\n");
getch();
abort();
}
else stack[++(*t)] = obj;
}
int pop(int stack[], int *t)
{
int r;
if ((*t) < 0)
{
printf("Stack empty...\n");
printf("Error in expression\n");
getch();
abort();
}
else r = stack[(*t)--];
return (r);
}
"MyStack.h"
包含我需要的库以及函数pop
和push
的声明。理想情况下,*t
应该包含第一个数字,然后将其推入stack
,然后继续推入下一个数字,直到*t
指向运算符为止。在那里应该弹出从stack
推送的最后2位数字,进行操作并将结果返回到“ stuck”。
而是this happens http://prntscr.com/nrf7b9
如您所见,尽管它获得了正确的值,但它会不断循环并更改值,直到它变为-1,然后继续执行isdigit
函数。