Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 16

Discussione: strcmp (Linguaggio C)

  1. #1

    strcmp (Linguaggio C)

    Salve...

    Ho un codice del genere:
    codice:
     main () {
         int i;
         
         char destinazione[15], orario[6], codice[10], cercadest[15], cercaora[6];
            
             FILE *partenze;
             if ((partenze = fopen("partenze.txt", "r")) == NULL) {
                          printf("File could not be opened");
                                                                }
             else {
                  printf("Inserisci destinazione: \n");
                  scanf("%s", cercadest);
                  printf("Inserisci l'orario: \n");
                  scanf("%s", cercaora);
                  printf("Dalle ore %s sono disponibili i seguenti voli per '%s'\n",cercaora, cercadest);
                  
                  while(!feof(partenze)) {
                                        fscanf(partenze, "%s %s %s", codice, destinazione, orario);
                                        
                                        if ((strcmp(cercadest,destinazione) == 0) && (strcmp(cercaora,orario) < 0)) {
                                        
                                        printf("\n%s %s %s\n", codice, destinazione, orario); 
                                                                                                                     }    
                                                    }
                  
             fclose(partenze);
             }
             system("PAUSE");
            }
    Questo programma deve leggere delle stringhe in un file e mi deve stampare a video solo quelle che:
    1) presentano la destinazione che dò io in input
    2) quelle che, dato un orario ad esempio 9:00, mi escano a video quelle che presentano l orario dalle 9:00 in poi...

    Ora fino alla destinazione è tutto ok, il problema è che quel (strcmp(cercaora,orario) < 0) non mi funziona correttamente cioè mi si stampano anche le stringhe dove presentano l orario minore a quello dato ma io devo ricevere da quell orario in poi... Dove sta il problema?
    Il file è strutturato in questo modo:

    CodiceVolo Destinazione Orario

    P.S. Non voglio l esercizio bello e fatto chiedo solo dove ho sbagliato...

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Il tipo di confronto che fa la strcmp è di tipo "alfabetico"-

    La stringa che comincia con 1 è minore della stringa che comincia con 9 quindi la stringa

    10.00 viene prima di 9.00

    Se vuoi confrontare un orario, devi convertire in numero la parte delle ore e dei minuti e operare con quei valori.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Ci ho gia provato ma come faccio a prendere ore e minuti se nel file l orario e scritto in questo modo 21:30... E in input devo dare l orario in egual modo... Grazie comunque per le tue sante risposte e ringrazio anche gli altri che mi hanno prestato attenzione

  4. #4
    Puoi usare la sscanf...
    Amaro C++, il gusto pieno dell'undefined behavior.

  5. #5
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Originariamente inviato da Cyber-X91!
    Ci ho gia provato
    Ci hai provato ... come? Hai consultato il tuo libro? Cosa hai usato?

    Non si programma a caso ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  6. #6
    Il libro lho letto quasi tutto... Mancano le liste vabbe non centrano ora... Però non ridete... Ho provato con due int ore e minuti ma non li prenderà mai dato che c'è il due punti... Dovrei fare un controllo per fargli saltare il due punti?

  7. #7
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Basta che studi come lavora la funzione

    atoi
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  8. #8
    Allora sono andato a vedere la funzione atoi... Ho fatto

    codice:
    orarioconv = atoi(orario);
    Andando a stampare il contenuto di orarioconv mi da solo la prima cifra ad esempio 9... Il resto dove va a finire? Ho pensato la dimensione dell int troppo bassa ed ho provato con atol e atof ma lo stesso risultato

  9. #9
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    La atoi va usata due volte, una volta per ottenere l'ora e un'altra per ottenere i minuti.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  10. #10
    Quindi dal file gli faccio prendere sempre la stringa tipo 9:18 nella variabile orario e poi con l'atoi la devo eseguire due volte su "orario"?

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.