//定义日期的结构体变量类型
struct DATE
{
int year;
int month;
int day;
};
//日期输入函数声明
void InputDate(struct DATE base,struct DATE *input);
//闰年判断函数声明
int RunNian(int year);
//当月天数判断函数声明
int RiQi(int month,int flag);
//计算相差天数函数声明
int ComputeTS(struct DATE base,struct DATE *input);
//判断函数声明
void BoyOrGirl(int tianshu);
int main(int argc, const char * argv[])
{
printf("第10题开始:\n");
//定义基准年月日
struct DATE base = {2006,1,1};
struct DATE input = {0};
int result = 0;
//调用输入日期函数
InputDate(base,&input);
//调用计算相差天数函数
result = ComputeTS(base,&input);
//调用函数判断,小明当前日期是结识帅哥还是美女
BoyOrGirl(result);
printf("第10题结束\n");
return 0;
}
//函数:输入日期
void InputDate(struct DATE base,struct DATE *input)
{
int date = 0;
int rcode=0;
//静态变量:输入次数变量(统计输入的次数)
static int ics=0;
while (rcode != 3)
{
if (ics > 0)
{
//清除缓存
rewind(stdin);
printf("输入有误(可能是日期输入的格式有误或者是输入日期的年月日有误),请重新输入!\n");
}
printf("请输入日期(%d年%d月%d日之后),以'-'分隔(例:2006-2-1):\n",base.year,base.month,base.day);
rcode = scanf("%d-%d-%d",&(*input).year,&(*input).month,&(*input).day);
ics++;
}
//函数:闰年的判断
int RunNian(int year)
{
int flag = 0;
if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0) )
{
flag = 1;
}
return flag;
}
//当月天数判断函数
int RiQi(int month,int flag)
{
int ts31[7] = {1,3,5,7,8,10,12};
int ts30[4] = {4,6,9,11};
for (int i = 0; i < 7; i++)
{
if (month == ts31[i])
{
return 31;
}
}
for (int i = 0; i < 4; i++)
{
if (month == ts30[i])
{
return 30;
}
}
if (flag == 1)
{
return 29;
}
else{
return 28;
}
}
//计算相差天数函数
int ComputeTS(struct DATE base,struct DATE *input)
{
int tianshu[3] = {0};
int sum = 0;
//计算相差年份天数
if (base.year < (*input).year)
{
for (int y = base.year; y < (*input).year; y++)
{
if (RunNian(y))
{
tianshu[0] = tianshu[0] + 366;
}else
{
tianshu[0] = tianshu[0] + 365;
}
}
}
//计算月份相差天数
if (base.month < (*input).month)
{
for (int m = base.month; m < (*input).month; m++)
{
tianshu[1] = tianshu[1] + RiQi(m, rnflag);
}
}