年规定在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;
}