根据年月日,计算是该年的第几天

根据输入的年、月、日,计算该日期在当年中是第几天(提示:程序中定义一个结构体类型,如struct Date{int year; int month; int day},在主函数中输入一个日期,计算并输出结果。将计算任务交由一个函数完成,如编写一个函数int days(int year, int month, int day),主函数将年、月、日传递给该函数,最后在主函数中输出结果。)
此运行结果错误,求改正,

img

img

img

改正你现有的代码问题:

1、month 值大于 2 月的时候,从 3 月份开始,你要把 e 累加到你当前月份的前一个月,你代码里面并没有这样做,switch 条件语句只执行一次,你得提出来方法,进行循环调用一下,计算出 e 的真正值。
2、你代码里面后面有计算是不是闰年的分支判断,你累加也有问题,是闰年你要加 1,不是闰年不要加 1,你弄反了。

#include <stdio.h>

struct Date {
    int year;
    int month;
    int day;
};
int days(int year, int month, int day) {
    int daysInMonth[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

    // 如果是闰年,将二月份的天数改为29if (isLeapYear(year)) {
        daysInMonth[1] = 29;
    }

    // 计算当月之前月份的天数之和
    int days = 0;
    for (int i = 0; i < month - 1; i++) {
        days += daysInMonth[i];
    }

    // 加上当月的天数
    days += day;

    return days;
}

// 判断是否为闰年的函数
int isLeapYear(int year) {
    if (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)) {
        return 1;
    }
    return 0;
}
int main() {
    struct Date date;
    printf("输入年月日(格式:YYYY MM DD):");
    scanf("%d %d %d", &date.year, &date.month, &date.day);

    int result = days(date.year, date.month, date.day);
    printf("这是%d年的第%d天。\n", date.year, result);

    return 0;
}