遇到这种该怎么改啊。

img


任务描述
输入2100年某一天的月和日的值,输出这一天是否为合法日期(表达式会很长)。

输入格式:
输入两个整数,表示月和日。

输出格式:
合法日期输出YES,否则输出NO。

我估计对的,如对请点击采纳

#include<stdio.h>
int main()
{
    int m,r;
    scanf("%d%d",&m,&r);
    if(m==1||m==3||m==5||m==7||m==8||m==10||m==12)
      if(r<=31)
        printf("YES");
      else
        printf("NO");
    if(m==4||m==6||m==9||m==11)
      if(r<=30)
        printf("YES");
      else
        printf("NO");
    if(m==2)
      if(r<=28)
        printf("YES");
      else
        printf("NO");
    return 0;
}

这个错误警告,是scanf()函数的返回值没有处理,另对月份的判断没有,修改如下,供参考:

#include<stdio.h>
int main()
{
    int m,r;
    int ret = scanf("%d%d",&m,&r);
    if (ret == 2){        //修改
       if(m==1||m==3||m==5||m==7||m==8||m==10||m==12)
          if(r<=31 && r > 0)//修改
             printf("YES");
          else
             printf("NO");
       else if(m==4||m==6||m==9||m==11)//修改
          if(r<=30 && r > 0)//修改
             printf("YES");
          else
             printf("NO");
       else if(m==2)   //修改
          if(r<=28 && r > 0) //修改
             printf("YES");
          else
             printf("NO");
       else            //对月份的判断,< 1 , > 12
          printf("NO");
    }
    else                 //修改
       printf("Input error!");
    return 0;
}

提供带闰年判断的,检查输入日期是否合法的写法,供参考:

#include<stdio.h>
int isLeap(int y)
{
    return ((y%4==0 && y%100!=0)||(y%400==0));
}
int GetDaysOfMonth(int y, int m)
{
    int daysOfMonth[12] = {31,28,31,30,31,30,31,31,30,31,30,31};
    if(isLeap(y) && m == 2) return daysOfMonth[m-1]+1;
    return daysOfMonth[m-1];
}
int main()
{
    int month ,day,ret;
    printf("请输入月日:(mm dd)");
    ret = scanf("%d %d", &month, &day);
    if (ret == 2){
        if (month > 0 && month < 13 && day <= GetDaysOfMonth(2100,month) && day >= 1)
            printf("YES");
        else
            printf("NO");
    }
    else
        printf("Input error.");
    return 0;
}