C语言-求某年某月的天数,即该月的最大日数

请编写函数,求某年某月的天数,即该月的最大日数。

参数 year和month 为年份和月份,若参数正确有效,则函数值为该月的最大日数,否则为0。

输入样例1
1995 3
输出样例1
31

输入样例2
-15 21
输出样例3
0

运行结果及报错内容

答案有四类:大月 小月 非法数据 二月,
我的非法数据和二月答案显示错误。

我的解答思路和尝试过的方法
#include <stdio.h>

int IsLeapYear(int year);
int MaxDayMonth(int year, int month);

int main()
{
    int y, m;
    scanf("%d%d", &y, &m);
    printf("%d\n", MaxDayMonth(y, m));
    return 0;
}
int MaxDayMonth(int year, int month)
{

    if(year>=0)
    {if(month==1||month==3||month==5||month==7||month==8||month==10||month==12)
        return 31;
    else if(month==4||month==6||month==9||month==11)
        return 30;
    else if(month==2)
    {if(year%400==0||(year%4==0&&year%100!=0))
        return 29;
    else return 28;
    }
    }
    else return 0;
    
}


请指正错误地点和原因,万分感谢!

#include <stdio.h>

int IsLeapYear(int year);
int MaxDayMonth(int year, int month);

int main()
{
int y, m;
scanf("%d%d", &y, &m);
printf("%d\n", MaxDayMonth(y, m));
return 0;
}
int MaxDayMonth(int year, int month)
{
while (1)
{
if (year >= 0)
{
if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12)
return 31;
else if (month == 4 || month == 6 || month == 9 || month == 11)
return 30;
else if (month == 2)
{
if (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0))
return 29;
else return 28;
}
else printf("月份输入错误,请重新输入:");
}
else return 0;
}

}

#include <stdio.h>

int main()
{
    int year, month;
    int days[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
    int maxDay = 0;
    scanf("%d%d", &year, &month);
    if (year >= 0 && month >= 1 && month <= 12)
    {
        maxDay = days[month - 1];
        if (month == 2)
        {
            int leap = 0;
            if (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0))
                leap = 1;
            maxDay += leap;
        }
    }
    printf("%d\n", maxDay);
    return 0;
}