Ho fatto alcune modifiche alla funzione nuovoLibro, a quanto pare però così mi da segmentation fault quando provo ad accedere al puntatore inizio al di fuori della funzione. è sbagliato come tipo di approccio? Ho qualche dubbio sul come far interagire le funzioni con la lista in modo diretto.. Utilizzando semplicemente il puntatore non sembra funzionare.
codice:int main(int argc, char *argv) { int select, nLibri=0, mod; Libro *inizio = NULL; do{ //cicla fino a quando l'utente decide di terminare. makeMenu(&select); while (getchar() != '\n'); switch(select){ case 0: //exit break; case 1: //alloca libro, lo accoda e aggiorna nLibri if(nLibri < SIZE){ nuovoLibro(inizio, nLibri); nLibri = countlibri(inizio); printf("Libro inserito correttamente(%d/%d).\n", nLibri, SIZE); }else printf("Lo spazio sugli scaffali della biblioteca è esaurito.\n"); break; case 2: //stampa lista if(nLibri!=0) stampLibri(inizio); else printf("Non ci sono libri.\n"); break; case 5: //rimuove un libro dalla lista, aggiorna nLibri if(nLibri!=0){ remLibri(inizio, nLibri); nLibri = countlibri(inizio); printf("Libro rimosso con successo(%d/%d).\n", nLibri, SIZE); }else printf("Non ci sono libri.\n"); break; } }while(select != 0); destLibri(inizio); return 0; } void makeMenu(int *select) { printf("\t\t==M E N U==\n" "0- Esci.\n1- Inserisci Libro.\n2- Visualizza Libri.\n3- Ricerca libri(1+ matching).\n4- Ricerca libri(full matching).\n5- Rimuovi libro.\n>"); scanf("%d", select); } void nuovoLibro(Libro *inizio, int nLibri) { Libro *p; Libro *temp = inizio; p= (Libro *) malloc(sizeof(Libro)); printf("Inserire l'ID del libro: "); scanf("%d", &p->ID); while (getchar() != '\n'); //per pulire il buffer dopo scanf printf("Inserire l'Autore: "); fgets(p->Autore, 255, stdin); printf("Inserire il Titolo: "); fgets(p->Titolo, 255, stdin); printf("Inserire le 5 parole chiavi, separate da spazi: "); fgets(p->Parole, 255, stdin); if(nLibri == 0){ //se è l'inizio della lista faccio puntare inizio all'elemento creato inizio = p; }else{ //altrimenti scorro fino alla fine della lista e lo aggiungo in coda while(temp->next) temp= temp->next; temp->next = p; } }

Rispondi quotando