Ciao...credo che l'errore sia da ricercare nella funzione inserisci testa. Succede che alloca nodi uguali all'ultimo inserito per n(numero inserimenti) volte. Non sono riuscito a correggerlo. ufffff...![]()
notare che ; ) è stato convertito in sorrisetto!codice:#include <stdio.h> typedef struct { char nome[80]; char indirizzo[80]; char telefono[80]; } record; typedef struct nodo *lista; struct nodo{ record *elemento; lista next; }; typedef enum{OK, ERROR} status; status allocanodo(lista *r_L, record *d); status inseriscitesta(lista *r_L, record *d); void display(lista start); int main() { lista start = NULL; record r; //usato per le immissioni char ec; for(;;){ printf("\n(i)inserisci nuovo nome \n"); printf("(p)stampa a video \n"); printf("(x)uscita dal programma \n"); ec = getche(); switch(ec){ case('i'): printf("inserisci il nome: "); gets(r.nome); printf("inserisci l'indirizzo: "); gets(r.indirizzo); printf("inserisci il telefono: "); gets(r.telefono); inseriscitesta(&start, &r); break; case('p'): display(start); break; case('x'): exit(); break; } getch(); } getch(); return 0; } //inserisce nella lista il nodo al posto giusto status allocanodo(lista *r_L, record *d){ *r_L = (lista)malloc(sizeof(struct nodo)); if(*r_L==NULL) return ERROR; else { (*r_L)->elemento=d; (*r_L)->next=NULL; } return OK; } status inseriscitesta(lista *r_L, record *d) { lista L; if (allocanodo(&L,d) == ERROR) return ERROR; L-> next = *r_L; *r_L = L; return OK; } void display(lista start) { while(start){ printf("%s\n", (start->elemento)->nome); printf("%s\n", (start->elemento)->indirizzo); printf("%s\n\n", (start->elemento)->telefono); start = start -> next; } }

Rispondi quotando

