PDA

Visualizza la versione completa : [C] Trasformare orario da formato 12 ore a formato 24 ore


khjaretta
30-08-2014, 12:33
Ciao a tutti ho provato a fare questo esercizio:
"Scrivi un programma di modo che l'utente inserisca un orario nel formato 12 ore e lo trasformi nel formato 24 ore. L'input deve avere la forma ore:minuti seguito da AM/PM"
Io l'ho fatto in questo modo:


#include <stdio.h>
int main(void)
{
int ore, minuti, ore2;
char gg[1];

printf("Inserisci un orario nel formato 12 ore: ");
scanf("%d:%d %s", &ore, &minuti, gg);

if (gg[0]=='A') {
ore2 = ore;
}
else if (gg[0]=='P') {
switch (ore) {
case 1: ore2 = 13; break;
case 2: ore2 = 14; break;
case 3: ore2 = 15; break;
case 4: ore2 = 16; break;
case 5: ore2 = 17; break;
case 6: ore2 = 18; break;
case 7: ore2 = 19; break;
case 8: ore2 = 20; break;
case 9: ore2 = 21; break;
case 10: ore2 = 22; break;
case 11: ore2 = 23; break;
case 12: ore2 = 00; break;
}
}
printf("%d:%d %s", ore2, minuti, gg);
return 0;
}


Il problema è che mi stampa dei numeri strani in "ore2"... Cosa ho sbagliato? :)

oregon
30-08-2014, 12:43
Nella prima lezione sulle stringhe del C viene detto che hanno un carattere terminatore. Quindi devi sempre prevedere un carattere in più.

Inoltre, se il testo ti dice che devi scrivere AM o PM vuol dire che la stringa dovrà essere di 3 caratteri. Quindi

char gg[3];

khjaretta
30-08-2014, 13:26
Nella prima lezione sulle stringhe del C viene detto che hanno un carattere terminatore. Quindi devi sempre prevedere un carattere in più.

Inoltre, se il testo ti dice che devi scrivere AM o PM vuol dire che la stringa dovrà essere di 3 caratteri. Quindi

char gg[3];

Grazie mille, problema risolto, non ci avevo pensato!! :D:D

oregon
30-08-2014, 13:30
Grazie mille, problema risolto, non ci avevo pensato!! :D:D

Questo era l'errore "grave" ... ma dovresti rivedere quel semplice esercizio

1) evitando tutti quei case

2) non visualizzando alla fine AM/PM dato che nel formato 24 ore quell'indicazione non ha senso

khjaretta
30-08-2014, 17:54
Questo era l'errore "grave" ... ma dovresti rivedere quel semplice esercizio

1) evitando tutti quei case

2) non visualizzando alla fine AM/PM dato che nel formato 24 ore quell'indicazione non ha senso
Hai perfettamente ragione ma, riguardo al punto 1), non avrei saputo farlo in altro modo... Per il punto 2)... Riconosco che AM/PM erano abbastanza inutili :mem::)

oregon
30-08-2014, 18:11
Basta rifletterci un po' ... nel caso 'P' ti basta

ore2=ore+12;
if(ore2==24) ore2=0;

Loading