oregon ha scritto:
Tu non ricompili il codice che hai indicato e stai eseguendo l'ultimo valido.
Non può visualizzare nulla perché la tua lista è L inizializzata a NULL
list L = NULL;
come è giusto che sia all'inizio, ma rimane tale, non aggiungi nodi, quindi non può visualizzare nulla.
Non puoi usare quel tipo di inizializzazione, devi leggere i dati da tastiera e fare l'inserimento in lista con apposita funzione che gestisca i puntatori. Oppure i dati possono venire da file e li puoi leggere per creare la lista.
In pratica ... non stai usando un vettore di strutture ma una lista collegata semplice quindi la tua lista è vuota e prima la devi popolare.
l'ho compilato il codice....
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>
#define MAXLEN 20
/* Creazione di un array di struct libro contenente 5 campi*/
struct libro{
char titolo[MAXLEN];
char nome_autori[MAXLEN];
int codice_identificativo;
int prezzo_di_prestito;
int status; /* Status indica se il libro è presente(1) oppure è in prestito(0)*/
struct node* next;
};
typedef struct libro* list;
typedef struct libro libri;
void stampaLista(list L);
/*La typedef permetterà di creare un array di struct nel corpo nel main attraverso cui inserire dei
libri con le caratteristiche descritte sopra nella struct*/
int main ()
{
list L = 0;
int scelta; /*Questa variabile sarà utilizzata nella switch per decidere che cosa fare...*/
int i,max; /* Variabili utilizzate per inserire un nuovo libro nell'archivio */
int flag=2;
char titolo_richiesto [MAXLEN]; /* Le variabili flag e titolo_richiesto sono utilizzate per richiedere un libro tramite il codice */
int cod_id; /* Variabile utilizzata per richiedere un libro tramite il codice*/
int id; /* Variabile utilizzata per restituire un libro tramite codice*/
char nome;
char matricola;
int trovato;
/* Inizializzazione della libreria */
struct libro libreria[] =
{
{"Il signore degli anelli",{"James Redfield","Silvestrone"},5,1,1},
{"Harry Potter",{"Paulo Coelho"},7,1,2},
{"La bibbia",{"Marco Bianchi"},8,0,3},
{"Piccole donne",{"Piero Mozzi"},60,0,4},
{"Guarnizione",{"Napoleton Hill"},1,0,5},
{"Il nome della rosa",{"Louise"},10,1,6},
{"Via col vento",{"Jerry Ford"},3,1,7},
{"Odissea",{"Rhonda Bryne","Galano","Loius Scott","Trent"},40,1,8},
{"Cuore",{"Fabio Marchesi"},12,1,9},
{"Malavoglia",{"Valeria Soglia"},4,0,10},
{"Siddharta",{"Still"},2,1,11},
{"Lolita",{"Moccia","Crail Wilcox"},12,0,12},
{"Amabili resti",{"Wagner","Pone Raffy"},35,1,13},
{"Sulla strada",{"Boldi"},1,1,14},
{"Possession",{"Esposito Faby"},25,1,15},
{"Germinale",{"Fabio Beatrice"},10,0,16},
{"Il piccolo principe",{"Siani"},24,1,17},
{"Un uomo",{"Finucci Genny"},14,1,18},
{"Amleto",{"Ohls","Ylenia Star"},23,0,19}
};
/* Inizializzazione biblioteca */
do {
printf("* * * * * * * * * * * * * * * * * * * * * * *\nBenvenuto nel programma di gestione biblioteca\n* * * * * * * * * * * * * * * * * * * * * * *\n");
printf("Inserisci nome Studente:\n");
scanf("%s", &nome);
printf("Inserisci matricola studente:\n");
scanf("%s", &matricola);
printf("Premere:\n 1. Stampa archivio\n 2. Richiedere libro tramite codice\n 3. Restituire un libro tramite codice\n 4. Esegui richiesta\n 5. Per uscire.\n");
printf("Inserisci il numero dell'operazione che vuoi effettuare:\n");
scanf("%d",&scelta); /*Viene inserito nella variabile var il numero inserito dall'utente e di conseguenza inserito nel ciclo Switch*/
switch (scelta) /* Creo uno switch con 5 case, uno per ogni possibile scelta */
{
case 1: /*stampa lista*/
printf("l'archivio contiene i seguenti libri:\n");
stampaLista(libreria);
case 2: /* Se l'utente preme il tasto 2 vuole richjedere un libro tramite il codice*/
i=0;
printf("Inserire il codice identificativo del libro da richiedere: \n");
scanf("%d",&cod_id);
while(flag!=0 && i<19){
if(cod_id==libreria[i].codice_identificativo){
flag=0;
if(libreria[i].status==1){
printf("\nIl libro e' presente nell'archivio ed e' disponibile.\n");
libreria[i].status=0;
printf("\nSuddetto libro le e' appena stato ceduto in prestito: %s.\nArrivederci e Grazie!\n", libreria[i].titolo);}
else{
printf("\nIl libro e' presente nell'archivio ma attualmente e' in prestito\n");}
}
else{
i=i+1;}}
if(flag!=0){
printf("\nL'archivio non dispone di alcun libro avente questo codice identificativo\nArrivederci e Grazie!\n");}
break;
case 3 : /* Case costruito per restituire un libro tramite codice*/
i = 0;
printf("Inserire il codice identificativo del libro da restituire: \n");
scanf("%d", &id);
trovato = 0;
while (trovato == 0 && i < 15) {
if (id == libreria[i].codice_identificativo) {
trovato = 1;
if (libreria[i].status == 1) {
printf("\nErrore: Il libro e' gia' disponibile.\nArrivederci e Grazie.\n");
}
else {
libreria[i].status = 1;
printf("\nSuddetto libro e' appena stato restituito: %s\nLa ringraziamo per la serieta'. Arrivederci!\n", libreria[i].titolo);
}
}
else {
i = i + 1;
}
}
if (trovato == 0) {
printf("\nL'archivio non dispone di alcun libro avente questo codice identificativo\nArrivederci e Grazie!");
}
break;
if (trovato == 0) {
printf("\nL'archivio non dispone di alcun libro avente questo codice identificativo\nArrivederci e Grazie!");
}
break;
case 4: /*esegui irchiesta*/
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*/
while (scelta<4);
} /*Fine main*/
void stampaLista(list L) {
if (L!= NULL) {
printf("%s,%s,%d,%d,%d", L->titolo,L->nome_autori,L->codice_identificativo,L->prezzo_di_prestito,L->status);
stampaLista(L->next);
}
}
ma per far si che la lista dei libri venga stampata come posso fare?