Alexv ha scritto:
Premetto che dal post e dalle struct che hai creato, ho paura che tu non abbia ben capito la traccia del compito. Si parla di liste, non di array, e non hai usato la ricorsione.
Tornando alla printf, per caso il costrutto case che hai postato si trova all'interno di un qualche ciclo e l'hai eseguito più volte? Se è così, il consiglio (valido in generale) è di inizializzare la variabile di controllo "flag" prima di ogni ciclo while, visto che la usi, appunto, per i while.
si vero ho aggiustato in realtà il programma deve fare:
1.prendere il libro in prestito
2. restituire un libro
3. Esegui richiesta\n (accetta o rifiuta)
4. Per uscire.
#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)*/
};
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 ()
{
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 */
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. Richiedere libro tramite codice\n 2. Restituire un libro tramite codice\n 3. Esegui richiesta\n 4. 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: /* 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 2 : /* 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 : /*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*/
però vorrei farlo in modo ricorsivo ed ho dei problemi con il case 1,2,3.Potresti aiutarmi a completare ovviamente non facendoli voi, ed inoltre se voglio inserire i libri non nel mai come posso fare?
grazie in anticipo