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;
}
}