#include <stdio.h>
typedef struct Date
{
int day;
int month;
int year;
} date;
int isleap(int y)
{
int tr=0;
if (((y%4==0)&&(y%100!=0))||(y%400==0))
tr=1;
return tr;
}
int ktra(date);
void dateinput(date *s)
{
scanf("%d%*c%d%*c%d",s->day,(*s).month,(*s).year);
while (ktra(s)==0)
{
printf("invalid date! Input again... ");
scanf("%d%*c%d%*c%d",&s.day,&s.month,&s.year);
}
}
int ktra(date s)
{
if ((*s.year<0)||(*s.day<0)||(*s.month<0)) return 0;
if (*s.month>12) return 0;
switch (*s.month) {
case 1: case 3: case 5: case 7: case 8: case 10: case 12:
if (*s.month>31) return 0;
case 4: case 6: case 9: case 11:
if (*s.month>30) return 0;
case 2:
if (isleap(*s.year)==0)
if (*s.month>28) return 0;
else
if (*s.month>29) return 0;
}
return 1;
}
int datecmp(date d1, 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;
}
int main()
{
date d1,d2;
printf("Input the first date (dd/mm/yyy): ");
dateinput(&d1);
printf("Input the second date (dd/mm/yyy): ");
dateinput(&d2);
if (datecmp(d1,d2)==-1)
printf("%d/%d/%d is before %d/%d/%d\n",d1.day,d1.month,d1.year,d2.day,d2.month,d2.year);
else
if (datecmp(d1,d2)==1)
printf("%d/%d/%d is after %d/%d/%d\n",d1.day,d1.month,d1.year,d2.day,d2.month,d2.year);
else
printf("The two dates are identical\n",d1.day,d1.month,d1.year,d2.day,d2.month,d2.year);
}