Заданы две строки, содержащие время в определенном формате. Определить разницу между этими временами - C (СИ)
Формулировка задачи:
Заданы две строки, содержащие время в формате: HH:MM:SS. Определить разницу между этими временами. При вводе проверять корректность времени. Пример: 23:30:00 и 5:45:00 → 6:15:00.
Решение задачи: «Заданы две строки, содержащие время в определенном формате. Определить разницу между этими временами»
textual
Листинг программы
#include <stdio.h>
struct List
{
int hours, minutes, seconds;
};
int main()
{
List a, b,result;
scanf("%i:%i:%i", &a.hours,&a.minutes,&a.seconds);
if (a.hours > 23 || a.minutes > 59 || a.seconds > 59)
{
printf("error");
return 1;
}
scanf("%i:%i:%i", &b.hours, &b.minutes, &b.seconds);
if (b.hours > 23 || b.minutes > 59 || b.seconds > 59)
{
printf("error");
return 1;
}
if (b.seconds < a.seconds)
{
b.seconds += 60;
b.minutes--;
if (b.minutes == -1)
{
b.hours--;
b.minutes += 60;
if (b.hours == -1)
{
printf("error");
return 1;
}
}
}
result.seconds = b.seconds - a.seconds;
if (b.minutes<a.minutes)
{
b.hours--;
b.minutes += 60;
if (b.hours == -1)
{
printf("error");
return 1;
}
}
result.minutes = b.minutes - a.minutes;
if (b.hours<a.hours)
{
printf("error");
return 1;
}
result.hours = b.hours - a.hours;
printf("%i:%i:%i\n", result.hours, result.minutes, result.seconds);
return 0;
}
Объяснение кода листинга программы
- Подключение стандартной библиотеки ввода-вывода
- Объявление структуры List, содержащей часы, минуты и секунды
- Объявление трех переменных типа List для хранения времени
- Ввод времени через консоль для переменной a
- Проверка корректности введенного времени. Если время некорректное, выводится сообщение об ошибке и возвращается 1
- Ввод времени через консоль для переменной b
- Проверка корректности введенного времени. Если время некорректное, выводится сообщение об ошибке и возвращается 1
- Если секунды времени b меньше, чем секунды времени a, то секунды b увеличиваются на 60, минуты b уменьшаются на 1, и если минуты b станут отрицательными, то часы b уменьшаются на 1, а минуты увеличиваются на 60. Если в процессе выполнения этих операций возникнет ошибка (один из параметров станет отрицательным), выводится сообщение об ошибке и возвращается 1
- Результат разницы секунд сохраняется в переменной result
- Если минуты времени b меньше, чем минуты времени a, то часы b уменьшаются на 1, минуты увеличиваются на 60, и если в процессе выполнения этих операций возникнет ошибка (один из параметров станет отрицательным), выводится сообщение об ошибке и возвращается 1
- Результат разницы минут сохраняется в переменной result
- Если часы времени b меньше, чем часы времени a, то выводится сообщение об ошибке и возвращается 1
- Результат разницы часов сохраняется в переменной result
- Результат выводится на экран
- Возвращается 0, если все операции выполнены корректно