Сравнение DateTime через структуры - C (СИ)
Формулировка задачи:
Помогите с идеей и реализацией, а то ничего не приходить в голову.
Есть структура
в ней размещены данные пользователей, с клавиатуры вводится Date и Time и нужно отсортировать пользователей с DateTime lastLogin > введенной (то есть активные пользователи). Вопросы: 1.Можно ли загнать дату с клавиатуры в существующие структуры или нужно что то создавать новое? 2.Как сравнить даты через структуры используя qsort и compare 3.Как отсортировать нужных пользователей с DateTime lastLogin > введенной
typedef struct DateTime { int year , month , day , hour , minute ; } DateTime ; typedef enum Role { Admin, Writer, Client } Role; typedef struct User { char firstName [ SHORTSTRLEN + 1]; char lastName [ SHORTSTRLEN + 1]; char email [ SHORTSTRLEN + 1]; char login [ SHORTSTRLEN + 1]; DateTime created ; DateTime lastLogin ; Role role ; } User ;
Решение задачи: «Сравнение DateTime через структуры»
textual
Листинг программы
int cmp(const void * a, const void * b) { DateTime * da = (DateTime*)a; DateTime * db = (DateTime*)b; if ( da->year == db->year ) { if ( da->month == db->month ) { if ( da->day == db->day ) { if ( da->hour == db->hour ) { return da->minute - db->minute; } else { return da->hour - db->hour; } } else { return da->day - db->day; } } else { return da->month - db->month; } } else { return da->year - db->year; } }
Объяснение кода листинга программы
В представленном коде реализована функция сравнения двух объектов типа DateTime. Список элементов кода:
- Объявление функции cmp с типом возвращаемого значения int и двумя указателями на void в качестве аргументов.
- Приведение указателей к типу DateTime*.
- Проверка равенства года.
- Если год не равен, то возвращается разница между годами.
- Если год равен, то проверяется равенство месяца.
- Если месяц не равен, то возвращается разница между месяцами.
- Если месяц равен, то проверяется равенство дня.
- Если день не равен, то возвращается разница между днями.
- Если день равен, то проверяется равенство часа.
- Если час не равен, то возвращается разница между часами.
- Если час равен, то проверяется равенство минуты.
- Если минута не равна, то возвращается разница между минутами.
- Если минута равна, то возвращается ноль.
- Если до этого момента объекты не сравнены и вернули разницу, то возвращается -1.
- Если до этого момента объекты не сравнены и не вернули разницу, то возвращается 0.
- Если объекты сравнены до этого момента, то возвращается 1.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д