Ciao,
ho sistemato alcune cose, in particolare ho praticamente riscritto la funzione creaLista. Di fatto non facevi correttamente l'inserimento in coda di un nuovo elemento. Il modo corretto di farlo è questo:
- scorri la lista fino alla fine, passando da un elemento al successivo
- quando sei arrivato all'ultimo elemento, "attacchi" quello nuovo
Io ho corretto il codice seguendo quello che avevi fatto, ma continua a non piacermi per un motivo molto semplice: preferirei che la parte di richiesta delle informazioni all'utente e quella di gestione della lista fossero separate. Significa che preferirei una funzione
codice:struct elemento * ins_in_coda(struct elemento *lista, int nuovo_elemento)
che si occupasse solo di inserire un elemento in coda alla lista, lasciando il dialogo con l'utente (printf e scanf) ad altre parti del codice.
Comunque prova a dare un'occhiata a questo:
codice:#include <stdio.h> #include <stdlib.h> #include <malloc.h> #define OUT 100 struct elemento { int codfisc; struct elemento *pun; }; struct elemento *creaLista(); void visLista(struct elemento *); struct elemento *paus=0; int i=0; int main() { int scelta; char invio; struct elemento *punLista = NULL; while(scelta!=OUT) { system("cls"); printf("\n\n\t\t ANAGRAFE"); printf("\n\n 1. Immissione persona"); printf("\n\n 2. Cancellazione persona"); printf("\n\n 3. Ricerca persona"); printf("\n\n 4. Visualizza anagrafe"); printf("\n\n 0. Fine"); printf("\n\n\n Scegliere una opzione\n"); scanf("%d", &scelta); scanf("%c", &invio); printf("\n\n\n"); switch(scelta) { case 0: scelta=OUT; break; case 1: i=i+1; printf("%d",i); punLista=creaLista(punLista); break; case 2: //canPer(); break; case 3: //ricPer(); break; case 4: visLista(punLista); break; } } return 0; } struct elemento *creaLista(struct elemento *head) { struct elemento *p, *tmp; p = (struct elemento*) malloc(sizeof(struct elemento)); p->pun = NULL; if(i == 1 && head == NULL) { printf("Inserisci il codice fiscale della 1a persona:\n"); scanf("%d", &p->codfisc); head = p; return head; } printf("Inserisci il codice fiscale della %da persona:\n", i); scanf("%d", &p->codfisc); tmp = head; while(tmp->pun != NULL) tmp = tmp->pun; tmp->pun = p; return head; } void visLista(struct elemento *p) { char invio; printf("punLista --->"); while(p!=NULL) { printf("%d\n", p->codfisc); p=p->pun; printf("premere un tasto per vedere l'elemento successivo"); scanf("%c", &invio); } printf("NULL\n"); }
![]()

Rispondi quotando