Salve,ho bisogno di un piccolo aiuto..ho fatto un programma in c, per gestire i voli di un'agenzia ma ho un problema...nella funzione "prenota" uso il do while per controllare che il codice inserito sia effettivamente esistente per effettuare la prenotazione di un viaggio, ma non funziona il controllo, o meglio funziona per la prima prenotazione ma per le altre, anche se digito il codice giusto, mi dice di ridigitarlo perchè è inesistente...ecco il codice
#include <stdio.h>
#include <stdlib.h>
#define MAX 100
typedef struct{
int codice;
char destinazione[20];
char categoria[20];
int datapartenza;
int datarientro;
int prezzopersona;
int postitot;
int postiocc;
}viaggio_t;
viaggio_t via[MAX];
void inserisci(viaggio_t via[], int dim);
void prenota(viaggio_t via[], int dim);
void massimo(viaggio_t via[], int dim);
int main()
{
int n;
printf("Quanti viaggi vuoi inserire in tabella?\n");
scanf("%d", &n);
inserisci(via, n);
prenota(via,n);
massimo(via,n);
system("pause");
return 0;
}
void inserisci(viaggio_t via[], int dim)
{
int i,j;
int num,codice,richiesta,liberi;
for(i=0; i<dim; i++)
{
printf("INSERIMENTO DATI DEL %i VIAGGIO\n\n", i+1);
printf("Inserisci codice del viaggio:\n");
scanf("%d", &via[i].codice);
printf("Inserisci destinazione del viaggio:\n");
scanf("%s", via[i].destinazione);
printf("Inserisci categoria del viaggio(SCEGLI TRA GIOVANI,ROMANTICO,CULTURALE O RELIGIOSO):\n");
scanf("%s", via[i].categoria);
printf("Inserisci data di partenza del viaggio:\n");
scanf("%d", &via[i].datapartenza);
printf("Inserisci data di rientro del viaggio:\n");
scanf("%d", &via[i].datarientro);
printf("Inserisci il prezzo per persona del viaggio:\n");
scanf("%d", &via[i].prezzopersona);
printf("Inserisci il numero totale di posti disponibili:\n");
scanf("%d", &via[i].postitot);
printf("Inserisci il numero di posti occupati:\n");
scanf("%d", &via[i].postiocc);
}
}
void prenota(viaggio_t via[], int dim)
{
int num,codice,richiesta,liberi;
int i;
printf("Quante prenotazioni vuoi effettuare?\n");
scanf("%d", &num);
for(i=0; i<num; i++)
{
do
{
printf("Inserisci il codice del viaggio in cui effettuare la prenotazione:\n");
scanf("%d", &codice);
if(codice != via[i].codice)
{
printf("ERRORE, CODICE NON ESISTENTE...RIDIGITA:\n");
}
} while(codice != via[i].codice);
printf("Inserisci il numero totale di posti da prenotare:\n\n");
scanf("%i", &richiesta);
liberi = (via[i].postitot - via[i].postiocc);
if (richiesta <= liberi)
{
printf("PRENOTAZIONE ACCETTATA\n\n");
printf("IMPORTO DEL VIAGGIO: %d\n", via[i].prezzopersona);
liberi = (liberi - richiesta);
}
if (richiesta > liberi)
{
printf("PRENOTAZIONE RIFIUTATA\n\n");
printf("DATA DI PARTENZA: %d\n", via[i].datapartenza);
printf("DATA DI RIENTRO: %d\n", via[i].datarientro);
}
}
}
void massimo(viaggio_t via[], int dim)
{
int i,imax,postitot;
imax=0;
postitot= via[0].postitot;
for(i=0; i<dim; i++)
{
if(postitot < via[i].postitot)
{
postitot=via[i].postitot;
imax=0;
}
} printf("IL MASSIMO E' : %d\n", via[imax].postitot);
}