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:
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);
}
}
Il problema è che se inserisco per esempio 3 4 5 6 mi viene stampato:
6
6
6
6
cosa sto sbagliando??