Buongiorno ho un problema sull'inserimento in cosa...l'inserimento in coda mi funziona ma quando inserisco titolo autore e codice il codice viene aggiunto correttamente ma il titolo ed l'autore no..potete aiutarmi?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXLEN 100
struct libri{
char titolo[100];
char autore[100];
int cod_id;
struct libri *next;
};
typedef struct libri* List;
typedef struct {
struct libri elementi[100];
int num_libri;
}Libro;
void ricerca (struct libri *l);
List initList(char titolo[30],char autore[30],int cod_id);
int menu(void);
struct libri *leggiFile(FILE *fp, struct libri *lista);
void scriviLista(struct libri *lista);
void scriviFile(FILE *fp, struct libri *lista);
struct libri *inserisciLista(struct libri *nodo, struct libri *lista);
struct libri *nuovoNodo(char *titolo,char *autore, int cod_id);
void gestioneErrore(void);
void freeLista(struct libri *lista);
void stampaLista(struct libri *top);
List insertTail(List L, char titolo, char autore ,int cod_id);
int main() {
int scelta;
FILE *fp;
struct libri *lista=NULL;
struct lista *top = NULL;
int cod_id;
char titolo = '\0';
char autore;
struct libri L;
int presenza;
Libro l;
char nome;
char cognome;
char matricola;
int id = 0;
int n ;
int trovato;
fp = fopen("Libri.txt","r");
if (fp == NULL) gestioneErrore();
lista = leggiFile(fp, lista);
fclose(fp);
while((scelta = menu())){
switch (scelta) /* Creo uno switch con 5 case, uno per ogni possibile scelta */
{
case 1: /*stampa lista*/
scriviLista(lista);
break
case 2: /* Se l'utente preme il tasto 2 si cerca se c'e il libro e richiedere un libro tramite il codice*/
ricerca(lista);
break;
case 3: /* Case costruito per restituire un libro tramite codice*/
printf("Inserire titolo \n");
scanf("%s", &titolo);
printf("Inserire autore' \n");
scanf("%s", &autore);
printf("Inserire codice' \n");
scanf("%d", &id);
lista=insertTail(lista,titolo,autore,id);
break;
case 4: /*esegui richiesta*/
break ;
case 5: /*Se l'utente vuole uscire dalla biblioteca*/
printf("Grazie per aver scelto il servizio di gestione della biblioteca, torna a trovarci!\n");
break;
default: /*Se l'utente sbaglia ad inserire il numero*/
printf("Questo tasto non consente di effetuare scelte! Riprova!\n");
break;
} /*Fine switch*/
} /*Fine do*/
return scelta;
} /*Fine main*/
int menu(){
int scelta; /*Questa variabile sarà utilizzata nella switch per decidere che cosa fare...*/
printf("* * * * * * * * * * * * * * * * * * * \nBenvenuto nel programma di gestione biblioteca\n* * * * * * * * * * * * * * * * * * * \n");
printf(" 1. Mostra archivio\n");
printf(" 2. Richiedi libro\n");
printf(" 3. Restituire libro\n");
printf(" 4. Esegui richiesta\n");
printf(" 5. Uscire\n");
printf("Inserisci scelta:");
scanf("%d",&scelta); /*Viene inserito nella variabile var il numero inserito dall'utente e di conseguenza inserito nel ciclo Switch*/
while(scelta<0 || scelta>5) { printf("Questo tasto non consente di effetuare scelte! Riprova!\n");
printf("Scelta: ");
scanf("%d", &scelta);
return scelta;
}
return scelta;
}
struct libri *nuovoNodo(char *titolo,char *autore, int cod_id)
{
struct libri *nodo;
nodo = (struct libri *) malloc(sizeof(struct libri));
if (nodo == NULL) return NULL;
strcpy(nodo->titolo,titolo);
strcpy(nodo->autore, autore);
nodo->cod_id =cod_id;
nodo->next = NULL;
return nodo;
}
struct libri *inserisciLista(struct libri *nodo, struct libri *lista)
{
if (lista==NULL) return nodo;
lista->next = inserisciLista(nodo, lista->next);
return lista;
}
void gestioneErrore()
{
printf("Errore\n");
exit(0);
}
struct libri *leggiFile(FILE *fp, struct libri *lista)
{
char titolo[256], autore[256];
int cod_id;
struct libri *nodo;
while(fscanf(fp,"%s%s%d",titolo,autore,&cod_id)==3){
nodo = nuovoNodo(titolo,autore,cod_id);
if (nodo == NULL)
gestioneErrore();
lista = inserisciLista(nodo, lista);
}
return lista;
}
void scriviFile(FILE *fp, struct libri *lista) {
while (lista!=NULL) {
fprintf(fp,"%s %s %d \n",lista->titolo,lista->autore,lista->cod_id);
lista = lista->next;
}
}
void stampaLista(struct libri *top)
{
if (top == NULL) {
printf("\n--------------\n\n");
}else
if (top!=NULL && top->titolo!=0) {
printf("%s %s %d", top->titolo, top->autore, &top->cod_id);
stampaLista(top->next);
}
}
void scriviLista(struct libri *lista) {
while (lista!=NULL) {
printf("%s %s %d\n",lista->titolo,lista->autore,lista->cod_id);
lista = lista->next;
{
printf("\n");
}
}
}
void ricerca (struct libri *l){
int trovato = 0 ;
char titolo[30];
char nome;
char matricola;
char cognome;
printf("\nInsersici il titolo del codice da cercare:");
scanf("%s", &titolo);
while (l != NULL && trovato != 1) {
if(strcmp(l->titolo, &titolo)==0) {
printf("\nIl libro cercato e' presente nell'archivio ed il libro e' disponibile");
printf("\nInserisci nome: ");
scanf("%s", &nome);
printf("\nInserisci cognome: ");
scanf("%s", &cognome);
printf("\nInserisci matricola: ");
scanf("%s", &matricola);
printf("\nOperazione effettuata con successo\n");
trovato=1;
}
l = l->next;
}
if(trovato != 1)
printf("\nIl libro cercato non e' presente nell'archivio ed il libro non e' disponibile\n");
}
List insertTail(List L, char titolo, char autore ,int cod_id) {
if (L != NULL) {
L->next = insertTail(L->next, titolo, autore, cod_id);
}
else{
L = initList(titolo,autore,cod_id);
}
return L;
}
List initList(char titolo[30] ,char autore[30] ,int cod_id) {
List L = (List)malloc(sizeof(struct libri));
strcpy(L->titolo,&titolo);
strcpy(L->autore,&autore);
L->cod_id= cod_id;
L->next = NULL;
return L;
}