定义一个12元素的int型数组存放1月份至12月份每个月的天数;
根据输入的年份判断是否为闰年,对上述数组中2月份的天数进行调整;
判断年份大于0、月份大于0小于13、日期大于0小于等于月份对应的天数为正确输入,否则为错误输入。
代码如下:
#include "stdio.h"
int main(int argc,char *argv[]){
int y,m,d,md[12]={31,28,31,30,31,30,31,31,30,31,30,31};//md是每月天数数组
printf("Please enter the year, month, day(separated by ' ')...\n");
scanf("%d%d%d",&y,&m,&d);
md[1] = y%4==0 && y%100 || y%400==0 ? 29 : 28;//闰年调整
if(y>0 && m>0 && m<13 && d>0 && d<=md[m-1])//判断输入是否正确
printf("Your input is correct!\n");//正确输出
else
printf("Error...\n");//错误输出
return 0;
}
运行样例如下:
int IsLeapYear(int iYear)
{
if (iYear<1600||iYear>=10000)
{
return -1;
}
if (iYear%4==0&&iYear%100!=0||iYear%400==0)//判断闰年的条件
{
return 1;
}else
{
return 0;
}
}
int DateCheck(int iYear,int iMonth,int iDay)
{
if (iYear<1600||iYear>=10000||iMonth>12||iMonth<1||iDay<1||iDay>31)
{
return 0;
}
if (iMonth==4||iMonth==6||iMonth==9||iMonth==11)
{
if (iDay==31)
{
return 0;
}
}else if (iMonth==2)
{
if (IsLeapYear(iYear)==0)
{
if (iDay>28)
{
return 0;
}
}else
{
if (iDay>29)
{
return 0;
}
}
}
return 1;
}
核心代码就是这些,另外你自己写主函数,调用DateCheck函数就可以了。