输入一个日期和天数15-3 结构体

输入一个日期startdate(年、月、日)和天数days(>=1),输出自该输入日期days天后的日期enddate(即edate=startdate+days)。要求输入和输出的年份为四位整数,输入时要对输入数据的有效性进行检查,并确保得到有效的输入数据。同时需耍考虑跨月、跨年和闰年等情况,闰年用自定义函数计算,日期用自定义结构体描述。

#include <stdio.h>
// 自定义日期结构体
struct Date {
    int year;
    int month;
    int day;
};

// 判断是否为闰年的函数
int isLeapYear(int year) {
    if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) {
        return 1; // 是闰年
    } else {
        return 0; // 不是闰年
    }
}
// 计算日期加上指定天数后的日期的函数
struct Date calculateEndDate(struct Date startDate, int days) {
    struct Date endDate = startDate;
    while (days > 0) {
        // 计算当月的最大天数
        int maxDaysInMonth;
        switch (endDate.month) {
            case 4:
            case 6:
            case 9:
            case 11:
                maxDaysInMonth = 30;
                break;
            case 2:
                if (isLeapYear(endDate.year)) {
                    maxDaysInMonth = 29;
                } else {
                    maxDaysInMonth = 28;
                }
                break;
            default:
                maxDaysInMonth = 31;
        }

        // 计算剩余天数
        int daysToAdd = (days < maxDaysInMonth - endDate.day + 1) ? days : (maxDaysInMonth - endDate.day + 1);

        // 更新日期
        endDate.day += daysToAdd;
        days -= daysToAdd;

        if (endDate.day > maxDaysInMonth) {
            endDate.day = 1;
            endDate.month++;
        }

        if (endDate.month > 12) {
            endDate.month = 1;
            endDate.year++;
        }
    }

    return endDate;
}

int main() {
    struct Date startDate, endDate;
    int days;

    // 输入年份、月份和日期
    printf("input year:");
    scanf("%d", &startDate.year);
    printf("input month:");
    scanf("%d", &startDate.month);
    printf("input day:");
    scanf("%d", &startDate.day);

    // 输入要添加的天数
    printf("input added days:");
    scanf("%d", &days);

    // 计算结束日期
    endDate = calculateEndDate(startDate, days);

    // 输出结果
    printf("start date:%d year %d month %d day", startDate.year, startDate.month, startDate.day);
    printf("end date:%d year %d month %d day", endDate.year, endDate.month, endDate.day);

    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值