这段代码如何处理闰年的二月最后一天到下个月第一天的情况?
时间: 2024-10-12 15:05:43 浏览: 6
在这段代码中,对于闰年的二月最后一天(即28日),如果直接减去一天(`date.day--`),将会得到27日而不是29日。为了处理这种情况,我们需要检查当前的月份和日期是否为2月28日,并在那时将月份设回为1(代表3月),同时年份不变。
更新后的 `prev_day()` 函数可以这样实现:
```c
Date prev_day(Date date) {
if (date.month == 2 && date.day == 28) {
// 如果是闰年的2月28日,变为下一个月的第一天
if ((date.year % 4 == 0 && date.year % 100 != 0) || (date.year % 400 == 0)) {
date.month = 3;
date.day = 1;
} else {
// 非闰年的2月,减少到27日
date.day = 27;
}
} else if (date.month == 1 && date.day == 1) {
// 如果是其他情况下的新年第一天,减去一天
date.year -= 1;
date.month = 12;
} else {
date.day--;
}
return date;
}
```
现在,无论输入的是闰年的2月28日还是非闰年的2月28日,函数都能正确地返回前一天的日期。