Hai corretto tutti gli errori che ti avevo segnalato all'inizio? Una volta apportate tutte le correzioni, posta il codice completo ma, per favore, indentato e spaziato correttamente.
Codice:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXLEN 100
[B]struct[/B] libri{
[B]char[/B] titolo[30];
[B]char[/B] autore[30];
[B]int[/B] cod_id;
[B]struct[/B] libri *next;
};
[B]typedef[/B] [B]struct[/B] libri* List;
[B]typedef[/B] [B]struct[/B] {
[B]struct[/B] libri elementi[100];
[B]int[/B] num_libri;
}Libro;
[B]void[/B] ricerca ([B]struct[/B] libri *l);
[B]int[/B] menu([B]void[/B]);
[B]struct[/B] libri *leggiFile(FILE *fp, [B]struct[/B] libri *lista);
[B]void[/B] scriviLista([B]struct[/B] libri *lista);
[B]void[/B] scriviFile(FILE *fp, [B]struct[/B] libri *lista);
[B]struct[/B] libri *nuovoNodo([B]char[/B] *titolo,[B]char[/B] *autore, [B]int[/B] cod_id);
[B]void[/B] gestioneErrore([B]void[/B]);
[B]void[/B] stampaLista([B]struct[/B] libri *top);
List insertHead(List L, [B]char[/B] titolo[30] ,[B]char[/B][30], [B]int[/B] cod_id);
[B]struct[/B] libri *inserisciLista([B]struct[/B] libri *nodo, [B]struct[/B] libri *lista);
[B]int[/B] main(){
[B]int[/B] scelta;
FILE *fp;
[B]struct[/B] libri *lista=[B]NULL[/B];
[B]char[/B] titolo;
[B]char[/B] autore;
[B]int[/B] id;
fp = fopen("Libri.txt","r");
[B] if[/B] (fp == [B]NULL[/B]) gestioneErrore();
lista = leggiFile(fp, lista);
fclose(fp);
[B]while[/B]((scelta = menu())){
[B]switch[/B] (scelta) /* Creo uno switch con 5 case, uno per ogni possibile scelta */
{
[B]case[/B] 1: /*stampa lista*/
scriviLista(lista);
[B]break[/B];
[B]case[/B] 2: /* Se l'utente preme il tasto 2 si cerca se c'e il libro e richiedere un libro tramite il codice*/
printf("Inserisci il titolo del libro da cercare: ");
scanf("%s", &titolo);
ricerca(lista);
[B]break[/B];
[B]case[/B] 3: /* Case costruito per restituire un libro tramite codice*/
[B]break[/B];
printf("Inserisci il titolo del libro da restituire: ");
scanf("%s", &titolo);
printf("Inserisci autore del libro da restituire: ");
scanf("%s", &autore);
printf("Inserisci il codice del libro da restituire: ");
scanf("%d", &id);
lista =insertHead(lista, &titolo , &autore, id);
[B]case[/B] 4: /*esegui richiesta*/
[B]break[/B] ;
[B]case[/B] 5: /*Se l'utente vuole uscire dalla biblioteca*/
printf("Grazie per aver scelto il servizio di gestione della biblioteca, torna a trovarci!\n");
[B]break[/B];
[B]default[/B]: /*Se l'utente sbaglia ad inserire il numero*/
printf("Questo tasto non consente di effetuare scelte! Riprova!\n");
[B]break[/B];
} /*Fine switch*/
} /*Fine do*/
[B]return[/B] 0;
} /*Fine main*/
[B]int[/B] menu(){
[B]int[/B] 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*/
[B]while[/B](scelta<0 || scelta>5) { printf("Questo tasto non consente di effetuare scelte! Riprova!\n");
printf("Scelta: ");
scanf("%d", &scelta);
[B]return[/B] scelta;
}
[B]return[/B] scelta;
}
[B]struct[/B] libri *nuovoNodo([B]char[/B] *titolo,[B]char[/B] *autore, [B]int[/B] cod_id)
{
[B]struct[/B] libri *nodo;
nodo = ([B]struct[/B] libri *) malloc([B]sizeof[/B]([B]struct[/B] libri));
[B]if[/B] (nodo == [B]NULL[/B]) [B]return[/B] [B]NULL[/B];
strcpy(nodo->titolo,titolo);
strcpy(nodo->autore, autore);
nodo->cod_id =cod_id;
nodo->next = [B]NULL[/B];
[B]return[/B] nodo;
}
[B]void[/B] gestioneErrore()
{
printf("Errore\n");
exit(0);
}
[B]struct[/B] libri *leggiFile(FILE *fp, [B]struct[/B] libri *lista)
{
[B]char[/B] titolo[30], autore[30];
[B]int[/B] cod_id;
[B]struct[/B] libri *nodo;
[B]while[/B](fscanf(fp,"%s%s%d",titolo,autore,&cod_id)==3){
nodo = nuovoNodo(titolo,autore,cod_id);
[B]if[/B] (nodo == [B]NULL[/B])
gestioneErrore();
lista = inserisciLista(nodo, lista);
}
[B]return[/B] lista;
}
[B]void[/B] scriviFile(FILE *fp, [B]struct[/B] libri *lista) {
[B]while[/B] (lista!=[B]NULL[/B]) {
fprintf(fp,"%s %s %d \n",lista->titolo,lista->autore,lista->cod_id);
lista = lista->next;
}
}
[B]void[/B] stampaLista([B]struct[/B] libri *top)
{
[B]if[/B] (top == [B]NULL[/B]) {
printf("\n--------------\n\n");
}[B]else[/B]
[B]if[/B] (top!=[B]NULL[/B] && top->titolo!=0) {
printf("%s %s %d", top->titolo, top->autore, &top->cod_id);
stampaLista(top->next);
}
}
[B]void[/B] scriviLista([B]struct[/B] libri *lista) {
[B]while[/B] (lista!=[B]NULL[/B]) {
printf("%s %s %d\n",lista->titolo,lista->autore,lista->cod_id);
lista = lista->next;
{
printf("\n");
}
}
}
[B]void[/B] ricerca ([B]struct[/B] libri *lista){
[B]int[/B] trovato = 0 ;
[B]char[/B] titolo;
[B]char[/B] nome;
[B]char[/B] matricola;
[B]while[/B] (lista != [B]NULL[/B] && trovato != 1) {
[B]if[/B](strcmp(lista->titolo, &titolo)==0) {
printf("\nIl libro cercato e' presente nell'archivio ed il libro e' disponibile");
trovato=1;
printf("\nInserisci nome:");
scanf("%s", &nome);
printf("\nInserisci matricola:");
scanf("%s", &matricola);
}
lista = lista->next;
}
[B]if[/B](trovato != 1)
printf("\n Libro non trovato");
}
List initList([B]char[/B] titolo, [B]char[/B] autore, [B]int[/B] cod_id) {
List L = (List)malloc([B]sizeof[/B]([B]struct[/B] libri));
strcpy(L->titolo, titolo);
strcpy(L->autore, autore);
L->cod_id=cod_id;
L->next = [B]NULL[/B];
[B]return[/B] L;
}
List insertHead(List L, [B]char[/B] titolo[30] ,[B]char[/B] autore[30], [B]int[/B] cod_id) {
[B]if[/B] (L != [B]NULL[/B]) {
List G = (List )malloc([B]sizeof[/B]([B]struct[/B] libri));
strcpy(G->titolo, titolo);
strcpy(G->autore, autore);
G->cod_id=cod_id;
G->next = L;
[B]return[/B] G;
}
[B]return[/B] initList(titolo, autore,cod_id);
}
[B]struct[/B] libri *inserisciLista([B]struct[/B] libri *nodo, [B]struct[/B] libri *lista)
{
[B]if[/B] (lista==[B]NULL[/B]) [B]return[/B] nodo;
lista->next = inserisciLista(nodo, lista->next);
[B]return[/B] lista;
}
--- i due messaggi sono stati uniti ---#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXLEN 100
struct libri{
char titolo[30];
char autore[30];
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);
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 *nuovoNodo(char *titolo,char *autore, int cod_id);
void gestioneErrore(void);
void stampaLista(struct libri *top);
List insertHead(List L, char titolo[30] ,char[30], int cod_id);
struct libri *inserisciLista(struct libri *nodo, struct libri *lista);
int main(){
int scelta;
FILE *fp;
struct libri *lista=NULL;
char titolo;
char autore;
int id;
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*/
printf("Inserisci il titolo del libro da cercare: ");
scanf("%s", &titolo);
ricerca(lista);
break;
case 3: /* Case costruito per restituire un libro tramite codice*/
break;
printf("Inserisci il titolo del libro da restituire: ");
scanf("%s", &titolo);
printf("Inserisci autore del libro da restituire: ");
scanf("%s", &autore);
printf("Inserisci il codice del libro da restituire: ");
scanf("%d", &id);
lista =insertHead(lista, &titolo , &autore, id);
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 0;
} /*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;
}
void gestioneErrore()
{
printf("Errore\n");
exit(0);
}
struct libri *leggiFile(FILE *fp, struct libri *lista)
{
char titolo[30], autore[30];
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 *lista){
int trovato = 0 ;
char titolo;
char nome;
char matricola;
while (lista != NULL && trovato != 1) {
if(strcmp(lista->titolo, &titolo)==0) {
printf("\nIl libro cercato e' presente nell'archivio ed il libro e' disponibile");
trovato=1;
printf("\nInserisci nome:");
scanf("%s", &nome);
printf("\nInserisci matricola:");
scanf("%s", &matricola);
}
lista = lista->next;
}
if(trovato != 1)
printf("\n Libro non trovato");
}
List initList(char titolo, char autore, 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;
}
List insertHead(List L, char titolo[30] ,char autore[30], int cod_id) {
if (L != NULL) {
List G = (List )malloc(sizeof(struct libri));
strcpy(G->titolo, titolo);
strcpy(G->autore, autore);
G->cod_id=cod_id;
G->next = L;
return G;
}
return initList(titolo, autore,cod_id);
}
struct libri *inserisciLista(struct libri *nodo, struct libri *lista)
{
if (lista==NULL) return nodo;
lista->next = inserisciLista(nodo, lista->next);
return lista;
}
le "" non indicano nulla...nel codice non ci sono ma non so perché qui le inserisce--- i due messaggi sono stati uniti ---Codice:#include <stdio.h> #include <stdlib.h> #include <string.h> #define MAXLEN 100 [B]struct[/B] libri{ [B]char[/B] titolo[30]; [B]char[/B] autore[30]; [B]int[/B] cod_id; [B]struct[/B] libri *next; }; [B]typedef[/B] [B]struct[/B] libri* List; [B]typedef[/B] [B]struct[/B] { [B]struct[/B] libri elementi[100]; [B]int[/B] num_libri; }Libro; [B]void[/B] ricerca ([B]struct[/B] libri *l); [B]int[/B] menu([B]void[/B]); [B]struct[/B] libri *leggiFile(FILE *fp, [B]struct[/B] libri *lista); [B]void[/B] scriviLista([B]struct[/B] libri *lista); [B]void[/B] scriviFile(FILE *fp, [B]struct[/B] libri *lista); [B]struct[/B] libri *nuovoNodo([B]char[/B] *titolo,[B]char[/B] *autore, [B]int[/B] cod_id); [B]void[/B] gestioneErrore([B]void[/B]); [B]void[/B] stampaLista([B]struct[/B] libri *top); List insertHead(List L, [B]char[/B] titolo[30] ,[B]char[/B][30], [B]int[/B] cod_id); [B]struct[/B] libri *inserisciLista([B]struct[/B] libri *nodo, [B]struct[/B] libri *lista); [B]int[/B] main(){ [B]int[/B] scelta; FILE *fp; [B]struct[/B] libri *lista=[B]NULL[/B]; [B]char[/B] titolo; [B]char[/B] autore; [B]int[/B] id; fp = fopen("Libri.txt","r"); [B] if[/B] (fp == [B]NULL[/B]) gestioneErrore(); lista = leggiFile(fp, lista); fclose(fp); [B]while[/B]((scelta = menu())){ [B]switch[/B] (scelta) /* Creo uno switch con 5 case, uno per ogni possibile scelta */ { [B]case[/B] 1: /*stampa lista*/ scriviLista(lista); [B]break[/B]; [B]case[/B] 2: /* Se l'utente preme il tasto 2 si cerca se c'e il libro e richiedere un libro tramite il codice*/ printf("Inserisci il titolo del libro da cercare: "); scanf("%s", &titolo); ricerca(lista); [B]break[/B]; [B]case[/B] 3: /* Case costruito per restituire un libro tramite codice*/ [B]break[/B]; printf("Inserisci il titolo del libro da restituire: "); scanf("%s", &titolo); printf("Inserisci autore del libro da restituire: "); scanf("%s", &autore); printf("Inserisci il codice del libro da restituire: "); scanf("%d", &id); lista =insertHead(lista, &titolo , &autore, id); [B]case[/B] 4: /*esegui richiesta*/ [B]break[/B] ; [B]case[/B] 5: /*Se l'utente vuole uscire dalla biblioteca*/ printf("Grazie per aver scelto il servizio di gestione della biblioteca, torna a trovarci!\n"); [B]break[/B]; [B]default[/B]: /*Se l'utente sbaglia ad inserire il numero*/ printf("Questo tasto non consente di effetuare scelte! Riprova!\n"); [B]break[/B]; } /*Fine switch*/ } /*Fine do*/ [B]return[/B] 0; } /*Fine main*/ [B]int[/B] menu(){ [B]int[/B] 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*/ [B]while[/B](scelta<0 || scelta>5) { printf("Questo tasto non consente di effetuare scelte! Riprova!\n"); printf("Scelta: "); scanf("%d", &scelta); [B]return[/B] scelta; } [B]return[/B] scelta; } [B]struct[/B] libri *nuovoNodo([B]char[/B] *titolo,[B]char[/B] *autore, [B]int[/B] cod_id) { [B]struct[/B] libri *nodo; nodo = ([B]struct[/B] libri *) malloc([B]sizeof[/B]([B]struct[/B] libri)); [B]if[/B] (nodo == [B]NULL[/B]) [B]return[/B] [B]NULL[/B]; strcpy(nodo->titolo,titolo); strcpy(nodo->autore, autore); nodo->cod_id =cod_id; nodo->next = [B]NULL[/B]; [B]return[/B] nodo; } [B]void[/B] gestioneErrore() { printf("Errore\n"); exit(0); } [B]struct[/B] libri *leggiFile(FILE *fp, [B]struct[/B] libri *lista) { [B]char[/B] titolo[30], autore[30]; [B]int[/B] cod_id; [B]struct[/B] libri *nodo; [B]while[/B](fscanf(fp,"%s%s%d",titolo,autore,&cod_id)==3){ nodo = nuovoNodo(titolo,autore,cod_id); [B]if[/B] (nodo == [B]NULL[/B]) gestioneErrore(); lista = inserisciLista(nodo, lista); } [B]return[/B] lista; } [B]void[/B] scriviFile(FILE *fp, [B]struct[/B] libri *lista) { [B]while[/B] (lista!=[B]NULL[/B]) { fprintf(fp,"%s %s %d \n",lista->titolo,lista->autore,lista->cod_id); lista = lista->next; } } [B]void[/B] stampaLista([B]struct[/B] libri *top) { [B]if[/B] (top == [B]NULL[/B]) { printf("\n--------------\n\n"); }[B]else[/B] [B]if[/B] (top!=[B]NULL[/B] && top->titolo!=0) { printf("%s %s %d", top->titolo, top->autore, &top->cod_id); stampaLista(top->next); } } [B]void[/B] scriviLista([B]struct[/B] libri *lista) { [B]while[/B] (lista!=[B]NULL[/B]) { printf("%s %s %d\n",lista->titolo,lista->autore,lista->cod_id); lista = lista->next; { printf("\n"); } } } [B]void[/B] ricerca ([B]struct[/B] libri *lista){ [B]int[/B] trovato = 0 ; [B]char[/B] titolo; [B]char[/B] nome; [B]char[/B] matricola; [B]while[/B] (lista != [B]NULL[/B] && trovato != 1) { [B]if[/B](strcmp(lista->titolo, &titolo)==0) { printf("\nIl libro cercato e' presente nell'archivio ed il libro e' disponibile"); trovato=1; printf("\nInserisci nome:"); scanf("%s", &nome); printf("\nInserisci matricola:"); scanf("%s", &matricola); } lista = lista->next; } [B]if[/B](trovato != 1) printf("\n Libro non trovato"); } List initList([B]char[/B] titolo, [B]char[/B] autore, [B]int[/B] cod_id) { List L = (List)malloc([B]sizeof[/B]([B]struct[/B] libri)); strcpy(L->titolo, titolo); strcpy(L->autore, autore); L->cod_id=cod_id; L->next = [B]NULL[/B]; [B]return[/B] L; } List insertHead(List L, [B]char[/B] titolo[30] ,[B]char[/B] autore[30], [B]int[/B] cod_id) { [B]if[/B] (L != [B]NULL[/B]) { List G = (List )malloc([B]sizeof[/B]([B]struct[/B] libri)); strcpy(G->titolo, titolo); strcpy(G->autore, autore); G->cod_id=cod_id; G->next = L; [B]return[/B] G; } [B]return[/B] initList(titolo, autore,cod_id); } [B]struct[/B] libri *inserisciLista([B]struct[/B] libri *nodo, [B]struct[/B] libri *lista) { [B]if[/B] (lista==[B]NULL[/B]) [B]return[/B] nodo; lista->next = inserisciLista(nodo, lista->next); [B]return[/B] lista; }
--- i due messaggi sono stati uniti ---
--- i due messaggi sono stati uniti ---Codice:#include <stdio.h> #include <stdlib.h> #include <string.h> #define MAXLEN 100 [B]struct[/B] libri{ [B]char[/B] titolo[30]; [B]char[/B] autore[30]; [B]int[/B] cod_id; [B]struct[/B] libri *next; }; [B]typedef[/B] [B]struct[/B] libri* List; [B]typedef[/B] [B]struct[/B] { [B]struct[/B] libri elementi[100]; [B]int[/B] num_libri; }Libro; [B]void[/B] ricerca ([B]struct[/B] libri *l); [B]int[/B] menu([B]void[/B]); [B]struct[/B] libri *leggiFile(FILE *fp, [B]struct[/B] libri *lista); [B]void[/B] scriviLista([B]struct[/B] libri *lista); [B]void[/B] scriviFile(FILE *fp, [B]struct[/B] libri *lista); [B]struct[/B] libri *nuovoNodo([B]char[/B] *titolo,[B]char[/B] *autore, [B]int[/B] cod_id); [B]void[/B] gestioneErrore([B]void[/B]); [B]void[/B] stampaLista([B]struct[/B] libri *top); List insertHead(List L, [B]char[/B] titolo[30] ,[B]char[/B][30], [B]int[/B] cod_id); [B]struct[/B] libri *inserisciLista([B]struct[/B] libri *nodo, [B]struct[/B] libri *lista); [B]int[/B] main(){ [B]int[/B] scelta; FILE *fp; [B]struct[/B] libri *lista=[B]NULL[/B]; [B]char[/B] titolo; [B]char[/B] autore; [B]int[/B] id; fp = fopen("Libri.txt","r"); [B] if[/B] (fp == [B]NULL[/B]) gestioneErrore(); lista = leggiFile(fp, lista); fclose(fp); [B]while[/B]((scelta = menu())){ [B]switch[/B] (scelta) /* Creo uno switch con 5 case, uno per ogni possibile scelta */ { [B]case[/B] 1: /*stampa lista*/ scriviLista(lista); [B]break[/B]; [B]case[/B] 2: /* Se l'utente preme il tasto 2 si cerca se c'e il libro e richiedere un libro tramite il codice*/ printf("Inserisci il titolo del libro da cercare: "); scanf("%s", &titolo); ricerca(lista); [B]break[/B]; [B]case[/B] 3: /* Case costruito per restituire un libro tramite codice*/ [B]break[/B]; printf("Inserisci il titolo del libro da restituire: "); scanf("%s", &titolo); printf("Inserisci autore del libro da restituire: "); scanf("%s", &autore); printf("Inserisci il codice del libro da restituire: "); scanf("%d", &id); lista =insertHead(lista, &titolo , &autore, id); [B]case[/B] 4: /*esegui richiesta*/ [B]break[/B] ; [B]case[/B] 5: /*Se l'utente vuole uscire dalla biblioteca*/ printf("Grazie per aver scelto il servizio di gestione della biblioteca, torna a trovarci!\n"); [B]break[/B]; [B]default[/B]: /*Se l'utente sbaglia ad inserire il numero*/ printf("Questo tasto non consente di effetuare scelte! Riprova!\n"); [B]break[/B]; } /*Fine switch*/ } /*Fine do*/ [B]return[/B] 0; } /*Fine main*/ [B]int[/B] menu(){ [B]int[/B] 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*/ [B]while[/B](scelta<0 || scelta>5) { printf("Questo tasto non consente di effetuare scelte! Riprova!\n"); printf("Scelta: "); scanf("%d", &scelta); [B]return[/B] scelta; } [B]return[/B] scelta; } [B]struct[/B] libri *nuovoNodo([B]char[/B] *titolo,[B]char[/B] *autore, [B]int[/B] cod_id) { [B]struct[/B] libri *nodo; nodo = ([B]struct[/B] libri *) malloc([B]sizeof[/B]([B]struct[/B] libri)); [B]if[/B] (nodo == [B]NULL[/B]) [B]return[/B] [B]NULL[/B]; strcpy(nodo->titolo,titolo); strcpy(nodo->autore, autore); nodo->cod_id =cod_id; nodo->next = [B]NULL[/B]; [B]return[/B] nodo; } [B]void[/B] gestioneErrore() { printf("Errore\n"); exit(0); } [B]struct[/B] libri *leggiFile(FILE *fp, [B]struct[/B] libri *lista) { [B]char[/B] titolo[30], autore[30]; [B]int[/B] cod_id; [B]struct[/B] libri *nodo; [B]while[/B](fscanf(fp,"%s%s%d",titolo,autore,&cod_id)==3){ nodo = nuovoNodo(titolo,autore,cod_id); [B]if[/B] (nodo == [B]NULL[/B]) gestioneErrore(); lista = inserisciLista(nodo, lista); } [B]return[/B] lista; } [B]void[/B] scriviFile(FILE *fp, [B]struct[/B] libri *lista) { [B]while[/B] (lista!=[B]NULL[/B]) { fprintf(fp,"%s %s %d \n",lista->titolo,lista->autore,lista->cod_id); lista = lista->next; } } [B]void[/B] stampaLista([B]struct[/B] libri *top) { [B]if[/B] (top == [B]NULL[/B]) { printf("\n--------------\n\n"); }[B]else[/B] [B]if[/B] (top!=[B]NULL[/B] && top->titolo!=0) { printf("%s %s %d", top->titolo, top->autore, &top->cod_id); stampaLista(top->next); } } [B]void[/B] scriviLista([B]struct[/B] libri *lista) { [B]while[/B] (lista!=[B]NULL[/B]) { printf("%s %s %d\n",lista->titolo,lista->autore,lista->cod_id); lista = lista->next; { printf("\n"); } } } [B]void[/B] ricerca ([B]struct[/B] libri *lista){ [B]int[/B] trovato = 0 ; [B]char[/B] titolo; [B]char[/B] nome; [B]char[/B] matricola; [B]while[/B] (lista != [B]NULL[/B] && trovato != 1) { [B]if[/B](strcmp(lista->titolo, &titolo)==0) { printf("\nIl libro cercato e' presente nell'archivio ed il libro e' disponibile"); trovato=1; printf("\nInserisci nome:"); scanf("%s", &nome); printf("\nInserisci matricola:"); scanf("%s", &matricola); } lista = lista->next; } [B]if[/B](trovato != 1) printf("\n Libro non trovato"); } List initList([B]char[/B] titolo, [B]char[/B] autore, [B]int[/B] cod_id) { List L = (List)malloc([B]sizeof[/B]([B]struct[/B] libri)); strcpy(L->titolo, titolo); strcpy(L->autore, autore); L->cod_id=cod_id; L->next = [B]NULL[/B]; [B]return[/B] L; } List insertHead(List L, [B]char[/B] titolo[30] ,[B]char[/B] autore[30], [B]int[/B] cod_id) { [B]if[/B] (L != [B]NULL[/B]) { List G = (List )malloc([B]sizeof[/B]([B]struct[/B] libri)); strcpy(G->titolo, titolo); strcpy(G->autore, autore); G->cod_id=cod_id; G->next = L; [B]return[/B] G; } [B]return[/B] initList(titolo, autore,cod_id); } [B]struct[/B] libri *inserisciLista([B]struct[/B] libri *nodo, [B]struct[/B] libri *lista) { [B]if[/B] (lista==[B]NULL[/B]) [B]return[/B] nodo; lista->next = inserisciLista(nodo, lista->next); [B]return[/B] lista; }
--- i due messaggi sono stati uniti ---
le B tra parente non indicano nulla...nel codice non ci sono ma non so perché qui le inserisce