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

C语言编写日期计算程序所有if分支被跳过的原因是什么?

问题成因

  • 直接触发分支全跳过的错误:不等运算符书写错误,代码中if ((month =! 12) && (day == 31))里的=!是错误写法,正确不等运算符为!=。=!等价于执行month = !12,C语言中非0常量取反结果为0,所以执行到这行时month变量会被直接赋值为0,后续所有和月份相关的if判断条件全部不成立,自然不会进入任何分支执行。
  • 校验函数逻辑完全失效:verifier函数第一行直接写了return 1;,后续所有日期合法性校验代码都是永远不会执行的死代码,虽然当前不会触发非法日期提示,但属于严重的逻辑漏洞。
  • 分支覆盖不全:你写的日期处理逻辑没有覆盖所有合法日期场景,1、3、5、7、8、10这几个有31天的普通月份,既不属于2月分支、也不属于12月31日分支、也不属于4/6/9/11月分支,没有对应处理逻辑,这些场景下也不会输出次日日期,看起来就像所有if都被跳过。

其他潜在逻辑错误

  • 闰年判断规则不完整,能被100整除但不能被400整除的年份不属于闰年,你当前的判断规则会把1900年这类年份误判为闰年。
  • day = day++;属于C语言未定义行为,直接写day++或者day = day + 1即可。
  • 校验函数中annee % 4 ==! 0同样是运算符书写错误,应改为annee % 4 != 0;同时if ( (month > 12) && (day > 31) )逻辑错误,只要满足月份大于12或日期大于31就属于非法日期,应该把&&改为||。

内容的提问来源于stack exchange,提问作者10969_ shirazu_

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 08:15:07