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
相关产品推荐
相关产品推荐

