Online Compiler C

#include <stdio.h> int main() { int M; scanf("%d",&M); if(M<=2){ printf("winter"); }else if(M==12){ printf("winter"); } if(2<M&&M<=5){ printf("spring"); } if(5<M&&M<=8){ printf("summer"); } if(8<M&&M<=11){ printf("autumn"); } return 0; }
这段代码根据输入的月份数字(1-12)输出对应的季节。它使用了多个独立的 if 语句来判断月份范围,但逻辑上存在一些重复和边界问题。

- 注意第一个 if 条件 `M<=2` 包含了 1 月和 2 月,但后面又单独处理了 `M==12` 作为冬季。实际上 12 月、1 月、2 月都是冬季,但你的代码把 12 月单独放在 else if 里,导致当输入 12 时,第一个 if 不成立(因为 12>2),然后进入 else if 输出 winter,这虽然正确,但结构不够清晰。更关键的是,如果输入 1 或 2,第一个 if 成立输出 winter,但后面的 if 条件 `2<M&&M<=5` 对于 M=2 不成立,所以没问题;但 M=1 或 2 时,后面的 if 都不会执行,所以输出正确。然而,这种写法容易遗漏或重复判断。

- 另一个问题是,你的代码没有处理输入月份不在 1-12 范围的情况。如果用户输入 0 或 13,所有 if 条件都不满足,程序不会输出任何内容。可以考虑增加一个 else 来处理非法输入。