Confronto tra due orari [C]

di Anonimizzato19239 il
6 risposte
Ciao!
Sto scrivendo un programma che - tra le varie scelte - permetta di visualizzare i treni che, data la destinazione e l'orario entro il quale si vuole arrivare a destinazione, stampi tutti i treni che rispettano i vincoli imposti dall'utente.
Il problema è che non so come confrontare due orari, dato che devo per forza inserirli nella lista dei treni presenti in stazione nel formato hh:mm , quindi utilizzando stringhe.
Ho provato quindi ad arrangiarmi ragionandoci un po' su (in un modo abbastanza strambo rivelatosi poi anche sbagliato), confrontando la stringa dell'orario del treno presente in stazione ("orarriv") con la stringa degli orari inserita, per la ricerca, dall'utente ("orarriv1").
Vi lascio il pezzo codice in questione, vi sarei grato se riusciste a schiarirmi le idee sulla situazione:
char dest1[50], orarriv1[6];
            int i=0;

            printf("\nDestinazione: "); scanf("%s", &dest1);
            printf("Orario di arrivo: "); scanf("%s", &orarriv1);

            do
            {
                bool t=false, t1=false;

                if(dest[i]==dest1 && (orarriv[i][0]&&orarriv[i][1])<(orarriv1[0]&&orarriv1[1]) && (orarriv[i][3]&&orarriv[i][4])<(orarriv1[3]&&orarriv1[4]))
                    {
                        t=true;
                        t1=true;
                    }

                if(t==true && t1==true)
                    {
                        printf("___________\n Treno %s \n___________", cod[i]);
                        printf("\nOrario partenza: %s", orpart[i]);
                        printf("\nOrario arrivo: %s", orarriv[i]);
                    }

                i++;
            }while(i>dim);

6 Risposte

  • Usa due variabili intere

    hh
    mm

    e per l'input

    scanf("%d:%d", &hh, &mm);

    Così potrai lavorare sugli interi più comodamente.
  • Magari! È quello che avrei fatto, se l'esercizio non mettesse proprio il vincolo di utilizzare una stringa
  • Allora l'input lo fai in una stringa ma dopo estrai le due parti in due variabili intere per i confronti.
  • In che modo potrei farlo?
  • Con una semplice sscanf
    
    	int hh, mm;
    	sscanf(orarriv1, "%d:%d", &hh, &mm);
    
  • Per rendere ancora più spiccio il confronto, dopo aver ricavato ore e minuti potresti convertirli in secondi e tenerti soltanto quel valore all'interno del programma, così il confronto si semplifica notevolmente.
Devi accedere o registrarti per scrivere nel forum
6 risposte