Salve a tutti mi sono appena iscritto volevo chiedere consiglio per un esercizio in C datomi al poli che non riesco a far girare come vorrei:
Questo è il testo dell'esercizio:
Si scriva un programma che acquisisca 2 stringhe corrispondenti a 2 orari
nel formato hh:mm. Il programma deve:
a. Controllare le stringhe, segnalando i casi in cui il formato non sia
rispettato (ad esempio 10,30 non è valido)
b. Stabilire se l’orario contenuto nella prima stringa è precedente a
quello contenuto nella seconda stringa
c. In caso affermativo, tradurre i 2 orari in valori interi corrispondenti
all’orario espresso come distanza in minuti da 00:00 e calcolarne la
differenza
d. Converta il risultato (sarà un numero intero positivo) in una stringa
così composta “<intervallo calcolato>_minuti” e la stampi a video.
Il codice che ho scritto:
codice:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
int ho1,min1,ho2,min2,i,gap;
char hour1[5],hour2[5],h1[2],h2[2],m1[2],m2[2],pausa;
printf("\n\n\t\tProgramma che acquisisce da tastiera due orari "
"\n\n\t\te ne calcola la diffrenza in minuti");
printf("\n\n\t\tInserisci il primo orario:\n\n\t\t");
for(i=0;((hour1[i]=getchar())!='\n') && (i<5);i++); // acquisizione primo orario
if(hour1[2]!=':'){ // controllo formato
printf("\n\n\t\t\aIl formato non è corretto!!");
printf("\n\n\t\tInserisci il primo orario:\n\n\t\t");
for(i=0;((hour1[i]=getchar())!='\n') && (i<5);i++);
}
printf("\n\n\t\tInserisci il secondo orario:\n\n\t\t");
for(i=0;((hour2[i]=getchar())!='\n') && (i<5);i++); // acquisizione secondo orario
if(hour2[2]!=':'){ // controllo formato
printf("\n\n\t\t\aIl formato non è corretto!!");
printf("\n\n\t\tInserisci il secondo orario:\n\n\t\t");
for(i=0;((hour2[i]=getchar())!='\n') && (i<5);i++);
}
strncpy(h1,hour1,2); // copio le cifre dell'ora del primo orario in h1
strncpy(h2,hour2,2); // copio le cifre dell'ora del secondo orario in h2
h1[3]='\0'; // termino h1
h2[3]='\0'; // termino h2
strncpy(m1,&hour1[3],2); // copio le cifre dei minuti del primo orario in m1
strncpy(m2,&hour2[3],2); // copio le cifre dei minuti del secondo orario in m2
m1[3]='\0'; // termino m1
m2[3]='\0'; // termino m2
// converto ore e minuti in interi e trasformo le ore in minuti
min1=atoi(m1);
ho1=atoi(h1);
min2=atoi(m2);
ho2=atoi(h2);
min1=min1+(ho1*60);
min2=min2+(ho2*60);
// calcolo la differenza in minuti
if(min1>=min2){
gap=min1-min2;
}
if(min1<min2){
gap=min2-min1;
}
printf("\n\n\t\tLa differenza tra i due orari e' di %d minuti",gap); // stampo a video la differenza
printf("\n\n\t\t");
pausa=getchar();
return 0;
}
Non ho implementato ancora l'ultimo punto perché se, per esempio, inserisco come orari 11:05 e 11:10 la differenza restituita dal programma è 160, quindi non va.
Sapreste aiutarmi per favore?