This reads a date and then does simple checking to see if the date is more or less valid
Code:
#include <stdio.h>
int valid_date(int dd, int mm, int yy)
{
static days[] = {0,31,28,31,30,31,30,31,31,30,31,30,31};
static ldays[] = {0,31,29,31,30,31,30,31,31,30,31,30,31};
int daymax;
int leap = yy%4 == 0 && yy%100 != 0 || yy%400 == 0;
if (mm < 1 || mm > 12)
{
return 0;
}
daymax = (leap == 1) ? ldays[mm] : days[mm];
if (dd < 1 || dd > daymax)
{
return 0;
}
return 1;
}
int main(void)
{
int dd, mm, yy;
char buf[20];
if (fgets(buf, 20, stdin) == 0)
{
return 1;
}
if (sscanf(buf, "%d%*c%d%*c%d", &dd, &mm, &yy) != 3)
{
return 1;
}
if (valid_date(dd, mm, yy))
{
printf("Day -- %d\nMonth -- %d\nYear -- %d\n", dd, mm, yy);
}
return 0;
}