Dobra znalazłem błąd, a właściwie 4:
1. Na początku main'a do zmiennej stos powienieneś przypisać NULL, w przeciwnym razie realloc może mieć problemy,
2. W funkcji push zmienna top powinna być inkrementowana po dodaniu liczby nie przed,
3. W funkcji stos_print pętla powinna wyglądać trochę inaczej:
for(i = top - 1; i >= 0; --i) {
printf("%d\n",stos[i]);
}
4. W funkcji pop drukowanie zdjętej liczby powinno wyglądać tak:
printf("usunieto ze stosu liczbe:%d", stos[top - 1]);
5. Pełny kod (działający u mnie):
//STOS
#include <stdio.h>
#include <stdlib.h>
// Mój dodatek
#include <time.h>
int size;
int* stos;
int top;
void pop();
void push();
void stos_size();
void empty();
void stos_print();
int main()
{
top=0;
size=0;
stos = NULL;
int w;
do{
stos_print();
printf("\n\nMENU GLOWNE:\n");
printf("1.Push\n");
printf("2.Pop\n");
printf("3.Size\n");
printf("4.Empty\n");
printf("5.koniec progamu\n");
printf("/////////////////////////\n");
printf("\nwybor:");
scanf("%d",&w);
switch(w)
{
case 1:
push();
break;
case 2:
pop();
break;
case 3:
stos_size();
break;
case 4:
empty();
break;
}
// Mój dodatek: uśpienie i czyszczenie ekranu
clock_t now = clock();
while(512 > clock() - now);
system("cls");
}while(w!=5);
return 0;
}
void stos_print()
{
int i;
printf("\n\nzawartosc stosu:\n");
for(i = top - 1;i >= 0;i--)
{
printf("%d\n",stos[i]);
}
if(top==0)printf("pusty\n");
printf("===============\n");
}
void push()
{
int a;
if(top == size)
{
int nsize=size+5;
int* nstos=(int*)realloc(stos,nsize*sizeof(int));
size=nsize;
if(nstos)
stos=nstos;
else
{
printf("blad");
free(stos);
}
}
printf("Podaj liczbe do polozenia na stosie:");
scanf("%d",&a);
stos[top]=a;
top++;
}
void pop()
{
if(top>=1)
{
printf("usunieto ze stosu liczbe:%d",stos[top - 1]);
top=top-1;
}
else
{
printf("stos pusty!");
}
}
void stos_size()
{
printf("liczba elementow na stosie:%d",top);
}
void empty()
{
if(top==0)
printf("Stos pusty");
else printf("stos nie jest pusty");
}
Pozdrawiam! :)