#include<stdio.h>
/*
struct time s //存放查询时间
int number //存放总天数
void count(struct time s) //计算相差总天数
void show() //显示打鱼或者晒网
*/
struct time //定义一个时间结构体
{
int year;
int month;
int day;
}s;
int number; //保存天数
/*
计算天数总和函数
计算日期的方法:计算起始日期到查询日期所在年年末的天数总和,然后减去多算的天数
*/
void count(struct time s)
{
int d,c; //用c表示相差多少年,用d表示闰年天数
int hyear,hmonth,hday; //保存起始时间,设定为2010年1月1日
hyear = 2010;
hmonth = 1;
hday = 1;
d = 0;
c = 0;
c = s.year-hyear+1; //将查询事件所在年全年包含在内
for(hyear;hyear<s.year;hyear++) //判断闰年有多少天
if(((hyear%4 == 0)&&(hyear%100 != 0)) || (hyear%400 == 0) )
d++;
number = d*366+(c-d)*365; //计算天数,去掉其实年和结束年
number = number-(((12-s.month)/2+1)*31+(12-s.month)/2*30+(31-s.day));
//用12减去起始月数,然后除以2,算出除日期所在月外天数为31天和30天的个数,算出天数,假定日期所在月都是31天
if(s.month<=2)
{
if(s.month == 2&&((s.year%4 == 0)&&(s.year%100 != 0)) || (s.year%400 == 0))
number++; //如果是2月闰年,少算一天
else if(s.month == 2)
number += 2; //如果是二月非闰年,少算两天
else if(!((s.year%4 == 0)&&(s.year%100 != 0)) || (s.year%400 == 0))
number ++; //如果不是二月且不是闰年,少算一天
}
else if(s.month>2)
{
if(s.month < 8&&s.month%2 != 0) //小于8月且月数为偶数就少算一天
number--;
else if(s.month == 12) //如果当月是12月少算31天
number = number+31;
}
}
//结果显示函数
void show()
{
printf("距当前日期共有%d天\n",number);
if(number%5<=3)
printf("今天应该打鱼!");
else
printf("今天晒网!") ;
}
int main(void)
{
int choose;
choose = 1;
do
{
printf("请分别输入终止年、月、日(形式如2010,2,1):\n");
scanf("%d,%d,%d",&s.year,&s.month,&s.day);
if((s.day<1||s.day>31)||(s.year<2010)||(s.month<1||s.month>12))//判定时间输入时间是否有效
{
printf("输入数据有误!!\n");
}
else
choose = 0;
}while(choose);
printf("\n");
count(s);
show();
return 0;
}