用c语言写三个函数分别判断年月日是否合法

年规定在1900-2050,月规定1-12,还要考虑是否闰年,闰年二月的天数是否正确,不正确则重新输入。本人实习生,整不出来领导要发飙了,这是一个通讯录内容的一部分,输入用户生日,1.name. 2.address. 3.birthyear. 4.birthmonth. 5.birthday

 #include<stdio.h>

int isYear(int y)
{
    return y>=1900 && y<=2050;
}

int isMonth(int m)
{
    return m>=1 && m<=12;
}

int isOK(int y, int m, int d)
{
    if(y<1900 || y>2050) return 0;
    if(m<1 || m>12) return 0;

    switch(d)
    {
    case 1:
    case 3:
    case 5:
    case 7:
    case 8:
    case 10:
    case 12:
        return d>=1 && d<=31;
    case 4:
    case 6:
    case 9:
    case 11:
        return d>=1 && d<=30;
    case 2:
        if((y/4==0&&y/100!=0)||(y/400==0)) return d>=1 && d<=29;
        else return d>=1 && d<=28;
    }
    return 0;
}


int main(void)
{
    int y,m,d;

    do
    {
        printf("请输入年月日:");
        scanf("%d%d%d",&y,&m,&d);
    }while(isOK(y,m,d)!=1);

    printf("%d-%d-%d\n",y,m,d);

    return 0;
}

修改了闰年的判断:

 #include<stdio.h>

int isYear(int y)
{
    return y>=1900 && y<=2050;
}

int isMonth(int m)
{
    return m>=1 && m<=12;
}

int isOK(int y, int m, int d)
{
    if(y<1900 || y>2050) return 0;
    if(m<1 || m>12) return 0;

    switch(m)
    {
    case 1:
    case 3:
    case 5:
    case 7:
    case 8:
    case 10:
    case 12:
        return d>=1 && d<=31;
    case 4:
    case 6:
    case 9:
    case 11:
        return d>=1 && d<=30;
    case 2:
        if((y%4==0&&y%100!=0)||(y%400==0)) return d>=1 && d<=29;
        else return d>=1 && d<=28;
    }
    return 0;
}


int main(void)
{
    int y,m,d;

    do
    {
        printf("请输入年月日:");
        scanf("%d%d%d",&y,&m,&d);
    }while(isOK(y,m,d)!=1);

    printf("%d-%d-%d\n",y,m,d);

    return 0;
}