Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    107

    [c] Come mai???

    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

    posto di seguito il listato:

    codice:
    #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

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    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 ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    107
    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...

    meglio di così non saprei come spiegarmi...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.