[C] Esercizio prenotazione voli

di il
5 risposte

[C] Esercizio prenotazione voli

Salve a tutti ho scritto questo programma e quando vado a inserire in input Barcellona e 9:20 non mi stampa nulla, se invece elimino if(ora>=ora1) e if(min>=min1) stampa, perchè?

printf("Inserisci destinazione: ");
   scanf("%s", dest);
   printf("Inserisci un orario: ");
   scanf("%d:%d", &ora1, &min1);
   
   if((fp=fopen(argv[1], "r"))==NULL)
   {
      fprintf(stderr, "Impossibile aprire il file\n");
   }
   while(fgets(riga, sizeof(riga), fp))
   {
       sscanf(riga, "%s %s %d:%d", volo, citta, &ora, &min);       
        if(strcmp(citta, dest)==0)
          if(ora>=ora1)
	    if(min>=min1)
              printf("%s %d:%d\n", volo, ora, min);
   }

5 Risposte

  • Re: [C] Esercizio prenotazione voli

    Il tutto dipende, ovviamente, dai valori "ora" e "min" che leggi da file; ti consiglio di stampare i quattro valori interessati, "ora", "min", "ora1" e "min1" subito dopo la chiamata a sscanf(), per capire cosa stai leggendo.
  • Re: [C] Esercizio prenotazione voli

    Si infatti non avevo pensato che mettendo ora e min interi non leggevo lo 0, ora mentre modificavo il codice e provavo i valori presi dalla seconda scanf ho notato che il programma cosi funziona, perchè? come fa a verificare i minuti?
    
    printf("Inserisci destinazione: ");
       scanf("%s", dest);
       printf("Inserisci un orario (hh:mm): ");
       scanf("%2s:%2s", ora1, min1);
       
       if((fp=fopen(argv[1], "r"))==NULL)
       {
          fprintf(stderr, "Impossibile aprire il file\n");
       }
       while(fgets(riga, sizeof(riga), fp))
       {
           sscanf(riga, "%s %s %s", volo, citta, ora);
                  
            if(strcmp(citta, dest)==0)
              if(strcmp(ora1,ora)>0) 
                 printf("%s %s\n", volo, ora);
       }
    
    
  • Re: [C] Esercizio prenotazione voli

    Ti consiglio di non procedere a tentativi. Definisci bene che tipo di valori ci possono essere nel file (ed eventualmente spiegacelo anche a noi) poi verifica di essere in grado di leggere correttamente come interi (lascia stare la strcmp in questo caso) stampando gli interi che leggi con printf.
    Fatto questo definisci poi come puoi controllare le coppie ore-minuti: scrivi una funzione a cui passi due coppie ore-minuti e le fai restituire 1 se la prima é successiva 0 se sono uguali -1 se la prima é precedente. E prova bene questa funzione.
    Alla fine fevi solo mettere assieme i pezzi
  • Re: [C] Esercizio prenotazione voli

    Ti ringrazio calendular il problema è che se dichiaro minuti intero e l'ora è 10:08 lui legge solo l'8, come faccio ad aggirare questo problema? ti ringrazio per l'idea della funzione
  • Re: [C] Esercizio prenotazione voli

    Grazie mille calendular, ora funziona perfettamente, ho seguito il tuo consiglio e ho fatto cosi:
    
       while(fgets(riga, sizeof(riga), fp))
       {
           sscanf(riga, "%s %s %d:%d", volo, citta, &ora, &min);             
            if(strcmp(citta, dest)==0)
              if(oracmp(ora, min, ora1, min1)==1)
    	    printf("%s %d:%d\n", volo, ora, min);
       }
    
    e la funzione
    
    int oracmp(int ora, int min, int ora1, int min1)
    {
       if(ora==ora1) { 
         if(min>min1) 
    	return 1;
       }
       else if(ora>ora1) {
    	return 1;
       }  
       else {
       printf("Non c'è nessun volo disponibile\n");
       exit(1);
       }
    }
    
Devi accedere o registrarti per scrivere nel forum
5 risposte