#include <stdio.h>
int count_day ( int, int, int, int ); //年,月,日,标识。int leap ( int year );
int main ()
{
long year, day, day1, day2;
int s_year, s_month, s_day, e_year, e_month, e_day;//s为起始的日期,e为终止日期
while ( 1 )
{
printf ("输入起始日期(年.月.日): ");
scanf ("%d.%d.%d", &s_year, &s_month, &s_day );
printf ("输入终止日期(年.月.日): ");
scanf ("%d.%d.%d", &e_year, &e_month, &e_day );
//不一样年的时间判断//
if ( s_year < e_year )
{
day = count_day ( s_year, s_month, s_day , 0 );
for (year=s_year+1;year<e_year; year++ )//年份累加
if (leap(year))//遇到闰年
day += 366L;
else //平年
day += 365L;
day += count_day (e_year, e_month, e_day, 1);
}
//同一年的时间判断
else if ( s_year == e_year )
{
day1 = count_day ( s_year, s_month, s_day, 1 );
day2 = count_day ( e_year, e_month, e_day, 1 );
day = day2-day1;//多的被减出来了
}
else
day = -1; //标识
if (day >= 0)
printf ("在%d.%d.%d - %d.%d.%d之间有%ld天\n", s_year, s_month, s_day, e_year, e_month, e_day , day );//输出
else
printf ("时间是错误的!\n");
}
return 0;
}
//计算天数的核心//
int count_day ( int year, int month, int day, int flag )
{
static int day_tab[2][12] = {{31,28,31,30,31,30,31,31,30,31,30,31},{31,29,31,30,31,30,31,31,30,31,30,31}};
//二维数组存放天数
int p, i, s;
if (leap(year)) //闰年为1选择后面的用
p = 1;
else //平年为0选择前面的用
p = 0;
if (flag)
{
s = day;
for ( i = 1; i < month; i++ )
s += day_tab[p][i-1];//查询数组累加天数
}
else
{
s = day_tab[p][month] - day;
for ( i = month + 1; i <= 12; i++ )
s += day_tab[p][i-1];
}
return ( s );//返回天数
}
//平闰年的判断//
int leap(int year)
{
if ( year%4==0&&year%100!=0||year % 400 ==0)
return 1;
else
return 0;
}