Salve a tutti! Sto scrivendo un semplice programma c che prenda da standard input una serie di interi, li inserisca in una lista e poi stampi la lista. Ecco il codice:
Il problema è che se inserisco per esempio 3 4 5 6 mi viene stampato:codice:#include <stdlib.h> #include <stdio.h> #include <unistd.h> struct nodo { int val; struct nodo *next; //puntatore al nodo successivo }; void inserisci_valore(int num, struct nodo **pnext); struct nodo *alloca_mem(); void stampa_lista(struct nodo *p); void inserisci_inlista(struct nodo *nuovo, struct nodo **pnext); int main(int argc, char *argv[]) { int num; struct nodo *testa_lista =NULL; //all'inizio la lista è vuota if (argc!=1) { /*l'utente non dovrebbe inserire argomenti*/ fprintf(stderr, "Usage %s [<file] [>file]\n ", argv[0]); return(EXIT_FAILURE); } /*lettura dallo standard input*/ while(feof(stdin)==0){ if(scanf("%d", &num)==1) { inserisci_valore(num,&testa_lista); } } stampa_lista(testa_lista); return EXIT_SUCCESS; } void inserisci_valore(int num, struct nodo **phead) { struct nodo *nuovo; nuovo=alloca_mem(); nuovo->val=num; inserisci_inlista(nuovo,phead); } void inserisci_inlista(struct nodo *nuovo, struct nodo **pnext){ struct nodo *p; nuovo->next=*pnext; *pnext= nuovo; } struct nodo *alloca_mem(void) { struct nodo *p; p=malloc(sizeof(struct nodo)); if(p==NULL) { fprintf(stderr,"Errore nell'allocazione della memoria\n"); exit(EXIT_FAILURE); } return p; } void stampa_lista(struct nodo *p) { struct nodo *n; if (p==NULL) printf ("Impossibile stampare,lista vuota!\n"); for(n=p; n!=NULL; n=n->next) { printf( "%d \n", p->val); } }
6
6
6
6
cosa sto sbagliando??![]()

Rispondi quotando
