PDA

Visualizza la versione completa : strcmp (Linguaggio C)


Cyber-X91!
20-02-2013, 16:06
Salve...

Ho un codice del genere:

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...

oregon
20-02-2013, 21:53
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.

Cyber-X91!
21-02-2013, 00:09
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

MItaly
21-02-2013, 00:35
Puoi usare la sscanf...

oregon
21-02-2013, 10:23
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 ...

Cyber-X91!
21-02-2013, 10:26
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?

oregon
21-02-2013, 10:44
Basta che studi come lavora la funzione

atoi

Cyber-X91!
21-02-2013, 11:04
Allora sono andato a vedere la funzione atoi... Ho fatto


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

oregon
21-02-2013, 11:09
La atoi va usata due volte, una volta per ottenere l'ora e un'altra per ottenere i minuti.

Cyber-X91!
21-02-2013, 11:20
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"?

Loading