Here is how you can do it. Note that scanf()
is not recommended to read input from the user. fgets()
and sscanf()
are a much safer approach.
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <string.h>
struct date {
int day;
int month;
int year;
};
int compare_dates(struct date *d1, struct date *d2)
{
if (d1->year < d2->year) return -1;
if (d1->year > d2->year) return 1;
if (d1->month < d2->month) return -1;
if (d1->month > d2->month) return 1;
if (d1->day < d2->day) return -1;
if (d1->day > d2->day) return 1;
return 0;
}
bool read_line(char *line, size_t size, FILE *f)
{
if (!fgets(line, size, f))
return false;
size_t npos = strcspn(line, "\n");
line[npos] = '\0';
return true;
}
bool read_date(struct date *d)
{
char line[255];
read_line(line, sizeof line, stdin);
return sscanf(line, "%d/%d/%d", &d->day, &d->month, &d->year) == 3;
}
void print_date(struct date *d)
{
printf("%d/%d/%d", d->day, d->month, d->year);
}
int main(void)
{
struct date d1, d2;
printf("Enter date 1 (format: dd/MM/yyyy): ");
read_date(&d1);
printf("Enter date 2 (format: dd/MM/yyyy): ");
read_date(&d2);
int result = compare_dates(&d1, &d2);
switch (result) {
case 0: printf("Same dates\n"); break;
case -1: print_date(&d1); printf(" is sooner\n"); break;
case 1: print_date(&d2); printf(" is sooner\n"); break;
}
}