The following program got some bugs. esp, when u key in 31/??/???? . of course ? means any integer from 0 to 9. I hope that u guys can fix the bugs for me. Thanks.

#include <conio.h>
#include <stdlib.h>

void err_mesg()
{
_setcursortype(_NOCURSOR);
gotoxy(2,24); textcolor(14 + BLINK); cprintf("\aInvalid Date Entry");
if ( getch() == 27) exit(0);
textattr(0x07); clrscr();
_setcursortype(_NORMALCURSOR);
}

void main()
{
clrscr();
int iday,imonth,iyear,lyear;
char day[3],month[3],year[5];
char c,day1,day2,month1,month2,year1,year2,year3,year4;

top:
cprintf("\nTo Quit The Program Press Esc");
cprintf("\n\rEnter the date(DD/MM/YYYY):");

// Day \\
cscanf("%c",&day1); cscanf("%c",&day2);
if (day1 < 48 || day1 > 57) {
err_mesg();
goto top;
}
day[0] = day1; day[1] = day2; day[2] = '\0';
iday = atoi(day);
if (iday < 1 || iday > 31 ) {
err_mesg();
goto top;
}
// End of Day \\
cscanf("%c",&c);
// Month
cscanf("%c",&month1); cscanf("%c",&month2);
month[0] = month1; month[1] = month2; month[2] = '\0';
imonth = atoi(month);
if (imonth < 1 || imonth > 12 ) {
err_mesg();
goto top;
}
if (imonth == 2)
if (iday > 29) {
err_mesg();
goto top;
}
if (iday > 30) /* here is the bugs */
if (imonth!=1 || imonth!=3 || imonth!=5 || imonth!=7 || imonth!=8 || imonth!=10 || imonth!=12) {
err_mesg();
goto top;
}
// End of Month \\
cscanf("%c",&c);
// Year \\
cscanf("%c",&year1); cscanf("%c",&year2); cscanf("%c",&year3); cscanf("%c",&year4);
year[0] = year1; year[1] = year2; year[2] = year3; year[3] = year4;
iyear = atoi(year);
if (iyear < 100 || iyear > 2099) {
err_mesg();
goto top;
}
if (imonth == 2)
if (iday == 29) {
lyear = iyear % 4;
if (lyear) {
err_mesg();
goto top;
}
}
// End of Year \\
_setcursortype(_NOCURSOR);
gotoxy(2,24); textcolor(1 + BLINK); cprintf("Thanks For Testing");
getch(); _setcursortype(_NORMALCURSOR);
}