Olá gente, sou novo no fórum, criei uma conta aqui para tirar uma dúvida, pretendo postar mais. Estou estudando Estrutura de Dados em C na faculdade e preciso implementar uma pilha em C, comecei a fazer um código utilizando vetores, de início comecei a fazer com struct e ponteiros, mas o professor liberou para fazer com Vetor. Ele quer que seja criada uma calculadora RPN (notação polonesa reversa) usando o conceito de Pilha. Meu código está rodando, porém não funciona, o problema está na hora de inserção de valores na pilha, porém não sei o que é! Ao invés de me retornar o resultado da conta, e/ou inserir um número, simplesmente me retorna uma posição de memória e não o valor que inseri.
#include <stdio.h>
#include <stdlib.h>
#define MAXPUSH 10
#define true 1
#define false 0
int pilha[MAXPUSH];
int push(int val, int x)
{
if (pilha[0] == NULL)
{
pilha[0] = val;
x++;
}
if (x == MAXPUSH)
{
printf("Overflow!\n\n");
system("pause");
exit(1);
}
pilha[x]=val;
x++;
return x;
}
int pop(int x)
{
if(x < 0)
{
printf("Underflow!\n\n");
system("pause");
exit(1);
}
pilha[x] = NULL;
x--;
return x;
}
int main()
{
int status=1;
int val, op, x;
printf("Bem-vindo! Calculadora RPN usando conceito de Pilha\n");
printf("Informe uma opcao:\n");
while (status==1)
{
printf("\n\n[1] - Soma\n[2] - Subtracao\n[3] - Multiplicacao\n[4] - Divisão\n[5] - Potenciacao\n[6] - Inserir Numero\n[7] - Sair\n\n");
printf("Informe o codigo referente ao processo desejado: ");
scanf("%d",&op);
while (op!= 1 && op!= 2 && op!= 3 && op!=4 && op!=5 && op!=6 && op!=7)
{
system("cls");
printf("Informe uma opcao:\n");
printf("[1] - Soma\n[2] - Subtracao\n[3] - Multiplicacao\n[4] - Divisao\n[5] - Potenciacao\n[6] - Inserir Numero\n[7] - Sair\nOpcao desejada: ");
scanf("%d",&op);
}
system("cls");
if (op==1)
{
if (x < 2)
{
printf("Impossivel realizar operacao!\n\n");
system("pause");
system("clear");
exit(1);
}
printf("Soma!");
val = pilha[x-1] + pilha[x];
pop(x);
pop(x);
push(val, x);
printf("\n\nValor do resultado: %d",val);
}
if (op==2)
{
if (x < 2)
{
printf("Impossivel realizar operacao!\n\n");
system("pause");
system("clear");
exit(1);
}
printf("Subtracao!");
val = pilha[x-1] - pilha[x];
pop(x);
pop(x);
push(val, x);
printf("\n\nValor do resultado: %d",val);
}
if (op==3)
{
if (x < 2)
{
printf("Impossivel realizar operacao!\n\n");
system("pause");
system("clear");
exit(1);
}
val = pilha[x-1] * pilha[x];
pop(x);
pop(x);
push(val, x);
printf("\n\nValor do resultado: %d",val);
}
if (op==4)
{
if (x < 2)
{
printf("Impossivel realizar operacao!\n\n");
system("pause");
system("clear");
exit(1);
}
printf("Divisao!");
val = pilha[x-1] / pilha[x];
pop(x);
pop(x);
push(val, x);
printf("\n\nValor do resultado: %d",val);
}
if (op==5)
{
if (x < 2)
{
printf("Impossivel realizar operacao!\n\n");
system("pause");
system("clear");
exit(1);
}
val = pilha[x-1] ^ pilha[x];
pop(x);
pop(x);
push(val, x);
printf("\n\nValor do resultado: %d",val);
}
if (op==6)
{
printf("Inserir Numero!\n\nInsira um numero na pilha: ");
fflush(stdin);
scanf("&d",&val);
push(val, x);
printf("\n\n");
system("pause");
printf("\n\n");
}
if (op==7)
{
printf("Sair!\n\n");
system("pause");
status = 0;
}
}
return 0;
system("pause");
}