设计思路
1、比较起始和结束的年份大小,起始年是否大于结束年,如果起始时间大于输入的结束时间,则把两个时间(年月日)互换值,再计算两个时间相差的天数。
2、判断是否起始时间小于结束时间,直接计算两个时间相差的天数。
3、判断是否为闰年。
代码如下
#include#include int main() { int s_year, s_month, s_day, s_sum = 0; static int days = 0; static int day = 0; int e_year, e_month, e_day, e_sum = 0; static int leap = 0; int tmp, tmp1, tmp2; printf("输入起始时间,格式为:年,月,日(xxxx,xx,xx)n"); scanf_s("%d,%d,%d", &s_year, &s_month, &s_day); printf("输入结束时间,格式为:年,月,日(xxxx,xx,xx)n"); scanf_s("%d,%d,%d", &e_year, &e_month, &e_day); if (s_year > e_year) //判断哪个年份大,如果起始时间大于结束时间,则互换值 { tmp = s_year; s_year = e_year; e_year = tmp; tmp1 = s_month; s_month = e_month; e_month = tmp1; tmp2 = s_day; s_day = e_day; e_day = tmp2; } while (s_year < e_year) { if (e_year % 400 == 0 || (e_year % 4 == 0 && e_year % 100 != 0)) { days = days + 366; } else { days = days + 365; } e_year--; } switch (s_month) { case 1:s_sum = 0; break; case 2:s_sum = 31; break; case 3:s_sum = 31 + 28; break; case 4:s_sum = 31 + 28 + 31; break; case 5:s_sum = 31 + 28 + 31 + 30; break; case 6:s_sum = 31 + 28 + 31 + 30 + 31; break; case 7:s_sum = 31 + 28 + 31 + 30 + 31 + 30; break; case 8:s_sum = 31 + 28 + 31 + 30 + 31 + 30 + 31; break; case 9:s_sum = 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31; break; case 10:s_sum = 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31 + 30; break; case 11:s_sum = 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31; break; case 12:s_sum = 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31 + 30; break; } s_sum = s_sum + s_day; switch (e_month) { case 1:e_sum = 0; break; case 2:e_sum = 31; break; case 3:e_sum = 31 + 28; break; case 4:e_sum = 31 + 28 + 31; break; case 5:e_sum = 31 + 28 + 31 + 30; break; case 6:e_sum = 31 + 28 + 31 + 30 + 31; break; case 7:e_sum = 31 + 28 + 31 + 30 + 31 + 30; break; case 8:e_sum = 31 + 28 + 31 + 30 + 31 + 30 + 31; break; case 9:e_sum = 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31; break; case 10:e_sum = 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31 + 30; break; case 11:e_sum = 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31; break; case 12:e_sum = 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31 + 30; break; } if (s_year % 400 == 0 || (s_year % 4 == 0 && s_year % 100 != 0)) { if (e_month > 2) { day++; } } e_sum = e_sum + e_day; days = days - s_sum + e_sum + day; printf("起始和结束日期相差了%d天n", abs(days)); //因天数计算可能会出现负数,abs()函数可把相差的天数变成正数 return 0; }
运行结果
结果1:结束日期大于初始日期
结果2:初始日期大于结束日期



