题目如标题。
本题主要考察边界输入问题。
#include<stdio.h>
#include<conio.h>
// 定义全局变量数组用于保存一年12个月分各月的天数
int _MONTH[]={{31},{28},{31},{30},{31},{30},{31},{31},{30},{31},{30},{31}};
void ShowDate(int,int,int);
void main(void)
{
char ch='Y';
int _y,_m,_d;
_y=_m=_d=0;
do
{
printf("Enter year,month and days:\n");
scanf("%d,%d,%d",&_y,&_m,&_d);
if((_y%4==0)&&(_y%100!=0)||(_y%400==0))
_MONTH[1]=29; // 当前输入的年份若为闰年,则将2月份置为29天
else _MONTH[1]=28; // 反之为28天
ShowDate(_y,_m,_d);
printf("Press any key to continue.(Press'E' to exit)\n");
ch=getch();
fflush(stdin); // 清空缓冲区,防止仅迭代一次。
} while (ch!='E');
}
void ShowDate(int _year,int _month,int _days)
{
// 如果月份为12,且天数为31,所以要调整年、月、日(其它判断与此原理相同)
if (_month==12&&_days>=31)
{
++_year;
_month=_days=1;
printf("%d,%d,%d\n",_year,_month,_days);
}
else if(_days==_MONTH[_month-1])
{
++_month;
_days=1;
printf("%d,%d,%d\n",_year,_month,_days);
}
else{
++_days;
printf("%d,%d,%d\n",_year,_month,_days);
}
}