Liste

di il
32 risposte

Liste

Buonasera mi potete aiutare a capire perché non stampa la la lista di libri...vi prego è urgente

#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 Libro;
 /*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 ()
{
    char coda;
    List L = NULL;
int err = 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;
 
/* 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*/
      L = stampaLista(L);
    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);
   while(flag!=0 && i<19){
if(id==libreria[i].codice_identificativo){
flag=0;
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(flag!=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*/

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


grazie in anticipo

32 Risposte

  • Re: Liste

    Finché continuerai a non usare i tag CODE (pur sapendolo) nessuno risponderà.

    E poi avevi un thread già aperto con lo stesso (poco utile) titolo e non c'è nulla di urgente. Non si usa così il forum ...
  • Re: Liste

    oregon ha scritto:


    Finché continuerai a non usare i tag CODE (pur sapendolo) nessuno risponderà.

    E poi avevi un thread già aperto con lo stesso (poco utile) titolo e non c'è nulla di urgente. Non si usa così il forum ...
    li avevo dimenticato...
  • Re: Liste

    Quella struttura è inizializzata in maniera sbagliata e il codice non è compilabile. Quindi tu non puoi avere provato il programma in esecuzione.
  • Re: Liste

    oregon ha scritto:


    Quella struttura è inizializzata in maniera sbagliata e il codice non è compilabile. Quindi tu non puoi avere provato il programma in esecuzione.
    In realtà alcune funzioni devo ancora realizzarle il codice incompleto è questo
    
    #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;
    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= NULL;
    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;
     
    /* 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*/
         stampaLista(L);
    
      case 2: /* Se l'utente preme il tasto 2 vuole richjedere un libro tramite il codice*/
          
    case 3 : /* Case costruito per restituire un libro tramite codice*/
     
     
        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);
         }
    }
    
    
    per ora il mio problema è che la stampa devi vari libri quando scelgo 1 non avviene
  • Re: Liste

    Forse non mi spiego. Quel codice non può essere compilato quindi come fai ad eseguirlo??

    La lista dei libri non può essere inizializzata in quel modo, qualsiasi compilatore ti darebbe errori di compilazione.

    Quindi il tuo problema per ora è scrivere correttamente il codice per poterlo compilare e solo dopo eseguire.
  • Re: Liste

    oregon ha scritto:


    Forse non mi spiego. Quel codice non può essere compilato quindi come fai ad eseguirlo??

    La lista dei libri non può essere inizializzata in quel modo, qualsiasi compilatore ti darebbe errori di compilazione.

    Quindi il tuo problema per ora è scrivere correttamente il codice per poterlo compilare e solo dopo eseguire.
    ok come posso inizializzala la lista dei libri...a me fa fare le varie scelte e poi se scelgo di eseguire a prima scelta mi indica solo il primo libro
  • Re: Liste

    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.
  • Re: Liste

    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?
  • Re: Liste

    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.
    come faccio a popolarla?
  • Re: Liste

    Te l'ho detto prima ... tu non leggi le risposte.

    Scrivi i dati in un file e leggilo inserendo i dati tramite apposita funzione che aggiunge nella lista.

    Fra l'altro stai mischiando in modo confuso due tipi di esercizi. Quello dell'array di strutture (in cui non esiste il next nella struttura) e quello della lista semplice (realizzata con il next nella struttura). Sono due esercizi diversi e due tipologie di dati che si trattano in modo diverso.
  • Re: Liste

    oregon ha scritto:


    Te l'ho detto prima ... tu non leggi le risposte.

    Scrivi i dati in un file e leggilo inserendo i dati tramite apposita funzione che aggiunge nella lista.

    Fra l'altro stai mischiando in modo confuso due tipi di esercizi. Quello dell'array di strutture (in cui non esiste il next nella struttura) e quello della lista semplice (realizzata con il next nella struttura). Sono due esercizi diversi e due tipologie di dati che si trattano in modo diverso.
    io voglio utilizzare le liste...però non inserendo i dati da file...potrei farla con le code?
  • Re: Liste

    Ma che c'entrano le code?

    Stai utilizzando una lista collegata semplice. Quindi, ti ripeto l'ultima volta, scrivi la funzione che aggiunge un elemento in lista e leggi i dati dal file chiamando tale funzione. Così popoli la lista e fai le prove.
  • Re: Liste

    oregon ha scritto:


    Ma che c'entrano le code?

    Stai utilizzando una lista collegata semplice. Quindi, ti ripeto l'ultima volta, scrivi la funzione che aggiunge un elemento in lista e leggi i dati dal file chiamando tale funzione. Così popoli la lista e fai le prove.
    eh si infatti non c'entrano nulla ma se ho la struct libri e poi li metto in un array..non è corretto?
  • Re: Liste

    Se metti le informazioni in un array poi devi scorrere l'array e inserire i dati nella lista. Così i dati saranno duplicati e comunque devi avere una funzione che inserisce i dati nella lista. La lista è una struttura dinamica, la devi popolare eseguendo il codice.
Devi accedere o registrarti per scrivere nel forum
32 risposte