Seguendo la soluzione con i puntatori ho gestito la cosa nel modo seguente:
struct libro{
char *autore;
char *titolo;
char *editore;
int anno;
int copie;
struct libro *next;
};
/*Inserimento di un libro nella lista*/
int inserisci(){
struct libro *l, *prev, *cur;
char a[DIM], t[DIM], e[DIM];
l=malloc(sizeof(struct libro));
if(l==NULL){
printf("la biblioetca è piena\n");
return 0;
}
printf("inserisci autore: ");
fgets(a, sizeof(a) ,stdin);
l->autore=malloc((strlen(a)+1)*sizeof(char));
strcpy(l->autore,a);
printf("inserisci titolo: ");
fgets(t, sizeof(t), stdin);
l->titolo=malloc((strlen(t)+1)*sizeof(char));
strcpy(l->titolo,t);
for (cur = biblioteca, prev = NULL;
cur!=NULL && (strcmp(cur->autore,a)!=0 || strcmp(cur->titolo,t)!=0);
prev=cur, cur=cur->next)
;
if(cur!=NULL){
printf("il libro e' gia' stato registrato\n");
return 0;
}
printf("inserisci editore: ");
fgets(e, sizeof(e), stdin);
l->editore=malloc((strlen(a)+1)*sizeof(char));
strcpy(l->editore,e);
printf("insersci anno: ");
scanf("%d",&l->anno);
fflush(stdin);
printf("inserisci copie: ");
scanf("%d",&l->copie);
fflush(stdin);
l->next=cur;
if(prev==NULL){
biblioteca=l;
}
else
prev->next=l;
return 1;
}
Sono corretti questi passaggi?