C语言按日期匹配季节的代码始终输出Winter,是哪里出错了?
错误原因&修正方案
1. 核心逻辑错误:strcmp用法完全写反
C语言中strcmp(str1, str2)的返回规则是:
- 两个字符串完全相等时返回
0 - 字符串不相等时返回非0值
你代码里所有判断月份匹配的条件都只写了strcmp(inputMonth, "月份名"),实际等价于判断「输入月份不等于该月份名」,和你想要的「输入月份等于该月份名」的逻辑完全相反。
比如输入April 10时,第二个冬季判断的条件strcmp(inputMonth, "January") && (1 <= inputDay && inputDay <= 31)会完全成立:April和January不相等所以strcmp返回非0(条件为真),同时10在1-31范围内,自然就会输出Winter。
修正方法:所有月份判断的地方都加上== 0,示例如下:
// 修正前 if (strcmp(inputMonth, "December") && (21 <= inputDay && inputDay <= 30)) // 修正后 if (strcmp(inputMonth, "December") == 0 && (21 <= inputDay && inputDay <= 31))
2. 次要错误1:12月冬季日期范围错误
12月有31天,你写的范围是<=30,会导致12月31日被判定为无效,把上限改成31即可。
3. 次要错误2:8月输出语句有多余占位符
夏季8月对应的printf("%sSummer\n");多写了%s占位符,但没有传入对应字符串参数,运行时会输出乱码,删掉%s改成printf("Summer\n");即可。
内容的提问来源于stack exchange,提问作者Claudıa Villałoro
相关产品推荐
相关产品推荐

