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

为什么我的C语言闰年日期校验代码中int day的修改未触发预期逻辑?

错误原因及修复方案

核心问题:逻辑运算符使用错误

你写的1月日期校验条件存在逻辑错误:
原代码1月判断条件为(day > 1 || day < 31),这里用了或运算符(||),任意整数都必然满足「大于1」或者「小于31」,这个条件是恒成立的:

  • 当你设置day=32时,32>1为真,判断条件直接通过,执行打印逻辑,永远不会进入else分支的错误提示
  • 同时你使用>1和<31,会把合法的1号、31号误排除,边界判断错误

修复方案

1月校验逻辑修正

把或运算符改为且运算符(&&),同时修正边界:

//day (January)
if ((month == 1) && (day >= 1 && day <= 31)) {
    printf("%d\n", day);
}else{
    if (month == 1) {
        printf("Error: Invalid day\n");
    }
}

2月校验逻辑同步修正

你写的2月校验存在完全相同的运算符错误,同时原来的闰年判断只覆盖了世纪闰年(能被400整除的年份),遗漏了普通闰年(能被4整除但不能被100整除的年份),修正后代码如下:

//February
// 先判断是否为闰年
int is_leap = (year % 400 == 0) || (year % 4 == 0 && year % 100 != 0);
if (month == 2) {
    if (is_leap) {
        if (day >=1 && day <=29) {
            printf("%d\n", day);
        } else {
            printf("Error: Invalid day\n");
        }
    } else {
        if (day >=1 && day <=28) {
            printf("%d\n", day);
        } else {
            printf("Error: Invalid day\n");
        }
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 06:18:02