You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言如何遍历数组所有元素?计算出生日期为当年第几天问题求解

问题解决方法

直接报错原因

你代码里month是数组名,属于不可修改的地址常量,所以不能对它执行++自增操作,这就是「增量操作数没有左值」报错的直接原因。遍历数组需要额外定义索引变量,不能直接操作数组名本身。

原有代码其他逻辑错误

你原来的代码还有几处功能性错误,不修正也无法得到正确结果:

  • C语言不支持month[0,2,4,6,7,9,11]这种批量下标赋值写法,逗号运算符会取最后一个值作为下标,你这行代码实际只修改了month[11]的值,其他位置都没赋值。
  • 闰年判断逻辑错误:正确闰年规则是「能被4整除但不能被100整除,或能被400整除」,你原来的判断条件写反了平年2月的判断逻辑。
  • 计算第几天的逻辑错误:你需要累加当前月份之前所有月份的总天数,再加上当月的日期,才是当年的第几天,原来的循环逻辑完全不符合需求。

修复后的可运行代码

#include <stdio.h>
int main() {
    int myd, mym, myy;
    printf("Enter your day of birth:");
    scanf("%d", &myd);
    printf("Enter your month of birth:");
    scanf("%d", &mym);
    printf("Enter your year of birth:");
    scanf("%d", &myy);

    // 直接初始化平年每个月的天数,不需要存月份序号
    int month_days[12] = {31,28,31,30,31,30,31,31,30,31,30,31};
    // 判断闰年,修改2月天数
    if((myy %4 == 0 && myy%100 !=0) || (myy%400 ==0)) {
        month_days[1] = 29;
    }

    int total = 0;
    int i = 0;
    // 累加前mym-1个月的总天数
    while(i < mym -1) {
        total += month_days[i];
        i++;
    }
    // 加上当月的日期
    total += myd;
    printf("这是当年的第%d天", total);
    return 0;
}

核心逻辑说明

  • 先初始化好平年12个月的天数数组,判断是闰年的话单独把2月的天数改成29即可,不需要单独判断当前月份来赋值。
  • 定义索引变量i遍历月份天数数组,累加当前输入月份之前的所有月份的天数,最后加上输入的日期就得到最终结果。

内容的提问来源于stack exchange,提问作者Eaza Kae

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 03:45:04