某年某月某日到某年某月某日有多少天

某年某月某日到某年某月某日有多少天 #include<stdio.h> typedef struct Date {    int Year;    int Month;    int Day; }Date; Date Start_date, End_date;                                            /* 全局变量 */ Date S, E;                                                            /* 用来存放起止日期的初始值,最终输出时用 */  int result_day = 0;                                                   /* 最终算得的总天数,初始值设为0 */                                                                       /* 函数声明 */ int Enter_date();                                                     /* 输入起止日期 */ int Count_month(int, int, int, int);                                  /* 计算两日期之间的月份差的天数 */ int Count_year(int, int);                                             /* 计算两日期之间的年份差的天数 */ int Is_leap_year(int year);                                           /* 判断当前年份是否为闰年 */ int Judge_month(int month, int year);                                 /* 判断当前年份中的当前月份的天数 */ int main()                                                            /* 主函数 */ {    Enter_date();                                                      /* 调用函数,输入起始日期和截止日期 */    result_day += (End_date.Day - Start_date.Day);                     /* 计算截止日期的日与起始日期的的日的天数的差*/    result_day = Count_month(Start_date.Month, End_date.Month, Start_date.Year, End_date.Year);                                                                              /* 调用函数,计算截止日期的月份与起始日期的月份的差的天数 */    result_day = Count_year(Start_date.Year, End_date.Year);           /* 调用函数,计算相隔整数年份的天数 */    PRintf("\n从%d年%d月%d日到%d年%d月%d日共有%d天。\n\n",             /* 输出结果 */         S.Year, S.Month, S.Day, E.Year, E.Month, E.Day, result_day);    return 0; } int Enter_date() {    printf("\n程序将给出您输入的两个日期(年月日)之间的天数。\n");     /* 对程序功能的简单说明 */    printf("您输入的年份范围是公元元年至公元3000年。\n\n");    printf("请输入起始日期, \n Year:");                                 /* 输入起始日期 */    scanf("%d", &Start_date.Year);    while (Start_date.Year < 0 || Start_date.Year > 3000)               /* 判断输入的年份是否正确 */    {       printf("Error: 年份输入错误!请重新输入。\n");   printf(" Year:");   scanf("%d", &Start_date.Year);    }    printf(" Month:");    scanf("%d", &Start_date.Month);    while (Start_date.Month < 1 || Start_date.Month > 12)              /* 判断输入的月份是否正确 */    {   printf("Error: 月份输入错误!请重新输入。\n");   printf(" Month:");   scanf("%d", &Start_date.Month);    }    printf(" Day:");    scanf("%d", &Start_date.Day);    while (Start_date.Day < 1 || Start_date.Day > 31)                  /* 判断输入的日期是否正确 */    {   printf("Error: 日期输入错误!请重新输入。\n");   printf(" Day:");   scanf("%d", &Start_date.Day);    }    printf("请输入截止日期,\n Year:");                                 /* 输入截止日期 */    scanf("%d", &End_date.Year);    while (End_date.Year < Start_date.Year  || End_date.Year > 3000)   /* 判断输入的年份是否正确 */    {       printf("Error: 年份输入错误!请重新输入。\n");   printf(" Year:");   scanf("%d", &End_date.Year);    }    printf(" Month:");    scanf("%d", &End_date.Month);    while (End_date.Month < 1 || End_date.Month > 12)                  /* 判断输入的月份是否正确 */    {   printf("Error: 月份输入错误!请重新输入。\n");   printf(" Month:");   scanf("%d", &End_date.Month);    }       /* 当起止日期的年份相同时,判断截止日期的月份是否大于起始日期的月份*/    while (End_date.Year == Start_date.Year && End_date.Month < Start_date.Month)    {   printf("Error: 输入的月份错误!请重新输入。\n");   printf(" Month:");   scanf("%d", &End_date.Month);    }    printf(" Day:");    scanf("%d", &End_date.Day);    while (End_date.Day < 1 || End_date.Day > 31)                      /* 判断输入的日期是否正确 */    {   printf("Error: 日期输入错误!请重新输入。\n");   printf(" Day:");   scanf("%d", &End_date.Day);    }        /* 当起止日期的年份月份都相同时,判断截止日期的日是否大于起始日期*/    while (End_date.Year == Start_date.Year && End_date.Month == Start_date.Month && End_date.Day < Start_date.Day)    {   printf("Error: 输入的日期错误!请重新输入。\n");   printf(" Day:");   scanf("%d", &End_date.Day);    }    S.Year = Start_date.Year;                                           /* 赋值给S和E中的各项 */    S.Month = Start_date.Month;    S.Day = Start_date.Day;    E.Year = End_date.Year;    E.Month = End_date.Month;    E.Day = End_date.Day;    return 0; } int Count_month(int S_Month, int E_Month, int S_Year, int E_Year) {    while (E_Month - S_Month != 0)                                       /* 计算截止日期的月份与起始日期的月份的差的天数*/    {       if (E_Month > S_Month)                                            /* 当截止日期的月份大于起始日期的月份时,应从起始日期的月份算起 */   {  result_day += Judge_month(S_Month, S_Year);          /* 调用判断月份的函数,确定当前月份的天数*/  ++S_Month;   }   else                                                         /* 否则,应从截止日期的月份算起,减去不足的天数 */   {  result_day -= Judge_month(E_Month, E_Year);  ++E_Month;   }    }    return result_day; } int Count_year(int S_Year, int E_Year) {    while (E_Year - S_Year >= 1)                                         /* 计算整数年份的天数 */    {       if (Is_leap_year(S_Year))  result_day += 366;   else  result_day += 365;   S_Year++;    }    return result_day; } int Is_leap_year(int year)                                             /* 判断当前年份是否为闰年 */ {    if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)   return 1;    else   return 0; } int Judge_month(int month, int year)                                   /* 判断某一年中的当前月份的天数 */ {    switch(month)    {   case 1:   case 3:   case 5:   case 7:   case 8:   case 10:   case 12: return 31; break;   case 2:  if (Is_leap_year(year)) return 29;  else return 28; break;   default: return 30; break;    } }