Я написал следующий код, который вычисляет разницу во времени между двумя заданными временами. Задача, однако, также требовала осознания перехода через полночь. Я не могу придумать, как реально справиться с этим в коде, за исключением того, что дельта сообщается как положительное значение. Я также искал в Интернете и нашел другой код, который, похоже, не справляется с этим лучше. Пожалуйста, обратите внимание; Я спрашиваю об алгоритме. Я не ищу функцию, которая делает это. Вот мой код:расчет разницы во времени между двумя разными временами - вечное время
struct time {
int hour;
int minutes;
int seconds;
};
int main (void)
{
struct time timeDiff (struct time now, struct time later);
struct time result, one, two;
printf("Enter the first time (hh:mm:sec): ");
scanf("%i:%i:%i", &one.hour, &one.minutes, &one.seconds);
printf("Enter the second time (hh:mm:sec): ");
scanf("%i:%i:%i", &two.hour, &two.minutes, &two.seconds);
result = timeDiff(one, two);
printf("Time is: %.2i:%.2i:%.2i\n", result.hour, result.minutes, result.seconds);
return 0;
}
struct time timeDiff (struct time now, struct time later)
{
struct time timeDiff;
timeDiff.hour = later.hour - now.hour;
timeDiff.minutes = later.minutes - now.minutes;
timeDiff.seconds = later.seconds - now.seconds;
return timeDiff;
}
Вот код, который я нашел в Интернете:
#include <stdio.h>
struct time
{
int hour;
int minute;
int second;
};
int main(void)
{
struct time time3;
//struct time get_time(struct time d);
//struct time elapsed_time(struct time d, struct time e);
int convert_to_seconds(struct time d);
int elapsed_time(int d, int e);
struct time conver_to_normal_time(int a);
struct time time1 = { 3, 45,15};
struct time time2 = { 9, 44, 03};
int a, b, c;
a = convert_to_seconds(time1);
b = convert_to_seconds(time2);
c = elapsed_time(a, b);
time3 = conver_to_normal_time(c);
printf(" %d:%d:%d", time3.hour, time3.minute, time3.second);
return 0;
}
struct time get_time(struct time d)
{
printf("Give me the time\n");
scanf(" %d:%d:%d", &d.hour, &d.minute, &d.second);
}
int convert_to_seconds(struct time d)
{
struct time time1_seconds;
int totalTime1_seconds;
time1_seconds.hour = d.hour * 3600;
time1_seconds.minute = d.second*60;
time1_seconds.second = d.second;
totalTime1_seconds = time1_seconds.hour + time1_seconds.minute + time1_seconds.second;
return totalTime1_seconds;
totalTime1_seconds = time1_seconds.hour + time1_seconds.minute + time1_seconds.second;
return totalTime1_seconds;
}
int elapsed_time(int d, int e)
{
int result;
result = d - e;
return result;
}
struct time conver_to_normal_time(int a)
{
struct time final_elapse_time;
final_elapse_time.hour = a/3600;
final_elapse_time.minute = (a/60) % 60;
final_elapse_time.second = a % 60;
return final_elapse_time;
}
Похоже, что у вас есть решение вашей проблемы (знак дельта), так что в чем вопрос? –
Вы сделали свое собственное вычитание по времени без учета каких-либо «заимствований». Если бы это было сотни, десятки и единицы, вы бы знали, как их вычесть. За секунды вы «заимствовали» 60 секунд с минут и т. Д. Попробуйте на бумаге. –
Привет, Скотт, да, я пытался понять, что это лучший способ справиться с этим, и если бы я сделал какие-то неправильные предположения. Комментарий Ванне помог. – maverick