PDA

Visualizza la versione completa : [C] Gestione stack con array statico


darksergio
25-01-2012, 17:16
salve, ho scritto questo programmino per simulare le operazioni su stack, sembra funzioni, ma non capisco come mai, mi visualizza un array "sporco"... nonostante la calloc iniziale che me lo restituisce "vuoto"... sarà sicuramente una sciocchezza... ma non riesco ad individuarla :confused:

posto di seguito il listato:




#include<stdio.h>
#include<stdlib.h>
#define MAX 10

/* Simulare in C la gestione di una pila (stack) tramite array statico
(può essere anche un array di struct) creando
le funzioni di manipolazione push() [inserimento] e pop() [eliminazione].
Il programma deve prevedere un menù
che consenta di scegliere l’operazione da eseguire.*/

void push(char*,char,int*);
void pop(char*,int*);
void visualizza(char*);

int main ()
{
short x=0;
char *stack;
int elem,head=-1;

stack=(char*)calloc(MAX+1,sizeof(char));

printf("Menu:\n\n1) effettuare operazione di push [inserimento]");
printf("\n2) effettuare operazione di pop [estrazione]");
printf("\n3) uscire dal programma");

while(x!=3)
{
printf("\n\noperazione: ");
fflush(stdin);
scanf("%d",&x);

if(x==1)
{
fflush(stdin);
printf("inserire dato: ");
scanf("%c",&elem);
push(stack,elem,&head);
visualizza(stack);
}

else if(x==2)
{
pop(stack,&head);
visualizza(stack);
}
else if (x==3)
{printf("uscita!"); exit(1);}
}
return 0;
}

void push(char *a, char elem, int *head)
{
if(*head == MAX - 1)
{
printf("Non e' possibile inserire altri dati stack pieno");
exit(1);
}
else
{
*(a + ++ *head) = elem;
printf("\nElemento inserito\n");
}
}


void pop(char *a, int *head)
{
if(*head == -1)
{
printf("\nNon e' possibile eliminare stack vuoto");
exit(1);
}
else
{
*(a +*head) = ' ';
(*head)--;
printf("\nElemento eliminato\n");
}fflush(stdin);
}

void visualizza(char *a)
{
short i;

for(i=0; i<MAX; i++)
printf("a[%d] %c\n",i,a[i]);

}


Grazie in anticipo :)

oregon
25-01-2012, 17:27
In che senso "sporco" ?

Fai un esempio di inserimento dati e di utilizzo ...

Hai fatto un po' di debugging linea per linea?


P.S. Il titolo della discussione non è molto indicativo ... ti consiglio di leggere il regolamento per capire come deve essere ...

darksergio
25-01-2012, 17:39
chiedo scusa per il per il titolo vago...

comunque finchè stampo l'array al di fuori del while mi mostra l'array azzerato(come dovrebbe essere) mentre quando effettuo operazioni (push) o (pop) mi stampa a schermo un array contenente lettere e simboli casuali... e non ne capisco il motivo... :confused:

meglio di così non saprei come spiegarmi...

Loading