C语言中,如何验证输入日期的正确性!~

用TC!~~~~
如何验证输入日期的正确性!~
如:1984-56-02 报错
1984-04-31 报错
1984-05-31 对
请给答案的大大给出源程序!~~~~~~~
要源程序哦!~~~~~
我也知道定范围!~~~~~~
可是怎么定呀!~~~~~~~~~

    主要验证三个信息:

    a.验证月数是否在1~12,m > 0 && m <= 12

    b.验证日数是否超过当月,d > 0 && d <= month[m - 1]

    c.对平闰年的判断,if ((y % 4 == 0 && y % 100 != 0) || y % 400 == 0)month[1] = 29

    例程:

    #include <stdio.h>
    static int is_valid_date(int y, int m, int d)
    {
            int month[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
            if ((y % 4 == 0 && y % 100 != 0) || y % 400 == 0)
                    month[1] = 29; 
            return  m > 0 && m <= 12 && d > 0 && d <= month[m - 1]; 
    }
    int main(void)
    {
            int y, m, d;
            scanf("%4d-%2d-%2d", &y, &m, &d);
            if (is_valid_date(y, m, d)) 
                    printf("valid date\n");
            else
                    printf("invalid date\n");
            return 0;
    }

温馨提示:答案为网友推荐,仅供参考
第1个回答  2007-08-17
就这么写的,没调试,你自己调一下

#include <stdio.h>
void main()
{
int year,month,date;
scanf("%d-%d-%d",&year,&month,&date);
printf("%d-%d-%d",year,month,date);

if(year<0||year>3000)
printf("Error!");
if(month>12||month<1)
printf("Error!");
switch(month)
{
case 1: if(date>31||date<1) printf("Error!");break;
case 2: if((year%4==0)&&(year%100!=0)||(year%400==0))
{
if(date>29||date<1) printf("Error!");
}
else
if(date>28||date<1) printf("Error!");
break;
case 3: if(date>31||date<1) printf("Error!");break;
case 4: if(date>30||date<1) printf("Error!");break;
case 5: if(date>31||date<1) printf("Error!");break;
case 6: if(date>30||date<1) printf("Error!");break;
case 7: if(date>31||date<1) printf("Error!");break;
case 8: if(date>31||date<1) printf("Error!");break;
case 9: if(date>30||date<1) printf("Error!");break;
case 10: if(date>31||date<1) printf("Error!");break;
case 11: if(date>30||date<1) printf("Error!");break;
case 12: if(date>31||date<1) printf("Error!");break;
}
}本回答被提问者采纳
第2个回答  2007-08-17
#include<stdio.h>
void main()
{
int year,month,date;
printf("请输入年份:");
scanf("%d",&year);
printf("请输入月份:");
scanf(" %d",&month);
printf("请输入日期:");
scanf(" %d",&date);
if(month>12||(year%100!=0&&year%4==0||year%400==0)&&month==2&&date>29||!(year%100!=0&&year%4==0||year%400==0)&&month==2&&date>28||(month==1||month==3||month==5||month==7||month==8||month==10||month==12)&&date>31||(month==4||month==6||month==9||month==11)&&date>30)
printf("输入错误!\n");
else
printf("输入正确!\n");
}
第3个回答  2007-08-17
很简单呐
年份确定一个范围
月份一个范围
日份确定一个范围
第4个回答  2019-07-16
1.
主要验证三个信息:
a.验证月数是否在1~12,m > 0 && m <= 12
b.验证日数是否超过当月,d > 0 && d <= month[m - 1]
c.对平闰年的判断,if ((y % 4 == 0 && y % 100 != 0) || y % 400 == 0)month[1] = 29
2.
例程:
#include
static int is_valid_date(int y, int m, int d)
{
int month[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
if ((y % 4 == 0 && y % 100 != 0) || y % 400 == 0)
month[1] = 29;
return m > 0 && m <= 12 && d > 0 && d <= month[m - 1];
}
int main(void)
{
int y, m, d;
scanf("%4d-%2d-%2d", &y, &m, &d);
if (is_valid_date(y, m, d))
printf("valid date\n");
else
printf("invalid date\n");
return 0;
}
相似回答