Problemi con il do while...cosa sbaglio?

di il
5 risposte

Problemi con il do while...cosa sbaglio?

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

5 Risposte

  • Re: Problemi con il do while...cosa sbaglio?

    Mi sa che ci sono delle incoerenze gravi ...

    Se i è un contatore che usi per il numero di prenotazione, come fai ad usarlo anche per il vettore dei viaggi ??
  • Re: Problemi con il do while...cosa sbaglio?

    Anche cambiandolo il problema rimane...
  • Re: Problemi con il do while...cosa sbaglio?

    In quella funzione "prenota" c'è un bel casino. Prova con questo. NON L'HO TESTATO NE' COMPILATO, però dovrebbe darti l'idea di cosa fare
    
    void prenota(viaggio_t via[], int dim)
    {
       int num,codice,richiesta,liberi;
       int i, trovato;
       
       codice = 0;
       
       do 
       {
       
    		printf("Inserisci il codice di viaggio? (0 per uscire) \n");
            scanf("%d", &codice);
    	    trovato = 0;
    		
    		// Verifica il viaggio richiesto esista
    		for (i = 0; i < size(via); i++) {
             
                if(codice == via[i].codice)
                {
                    trovato = 1;
    				break;
                }
            };
            
            if (trovato == 1) {		
             
    			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);
    			}
    			else
    			{
    				printf("PRENOTAZIONE RIFIUTATA\n\n");
    				printf("DATA DI PARTENZA: %d\n", via[i].datapartenza);
    				printf("DATA DI RIENTRO: %d\n", via[i].datarientro);
    			}   
          }
    	  else
    	  {
    		printf("CODICE NON TROVATO\n");
    	  }
    	  
    	  } while (codice != 0);
    	  
             
    }
    
    
  • Re: Problemi con il do while...cosa sbaglio?

    fabiana ha scritto:


    anche cambiandolo il problema rimane...
    Cambiandolo "cosa", "come" ?
  • Re: Problemi con il do while...cosa sbaglio?

    mentat ha scritto:


    In quella funzione "prenota" c'è un bel casino. Prova con questo. NON L'HO TESTATO NE' COMPILATO, però dovrebbe darti l'idea di cosa fare
    
    void prenota(viaggio_t via[], int dim)
    {
       int num,codice,richiesta,liberi;
       int i, trovato;
       
       codice = 0;
       
       do 
       {
       
    		printf("Inserisci il codice di viaggio? (0 per uscire) \n");
            scanf("%d", &codice);
    	    trovato = 0;
    		
    		// Verifica il viaggio richiesto esista
    		for (i = 0; i < size(via); i++) {
             
                if(codice == via[i].codice)
                {
                    trovato = 1;
    				break;
                }
            };
            
            if (trovato == 1) {		
             
    			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);
    			}
    			else
    			{
    				printf("PRENOTAZIONE RIFIUTATA\n\n");
    				printf("DATA DI PARTENZA: %d\n", via[i].datapartenza);
    				printf("DATA DI RIENTRO: %d\n", via[i].datarientro);
    			}   
          }
    	  else
    	  {
    		printf("CODICE NON TROVATO\n");
    	  }
    	  
    	  } while (codice != 0);
    	  
             
    }
    
    
    Grazie mille...mi hai dato un grande aiuto, l'ho modificato un pò, ora funziona
Devi accedere o registrarti per scrivere nel forum
5 risposte