Я создал программу для вычисления постфиксных уравнений, но что-то идет не так при входе в цикл 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
не покажет на оператора. Там должны появиться последние 2 цифры, введенные из stack
, выполнить операцию и вернуть результат в `` `застрял``.
Но вместо этого это происходит http://prntscr.com/nrf7b9
Как вы можете видеть, несмотря на то, что он получает правильное значение, он продолжает цикл и изменяет значения, пока не станет -1, а затем перейдет к функции isdigit
.