C语言if-else语句求助:停车费计算代码仅通过3/5测试用例
问题分析与代码修复
你的代码存在几个关键问题,导致测试用例不通过:
1. 分钟合法性判断错误
代码里用min1<59和min2<59,但合法的分钟范围是0-59,59分钟是有效的,这个判断会把17:59这类合法时间判定为非法,直接跳过后续逻辑,导致无输出。
2. 漏掉离场时间恰好为18:00的情况
规则明确18:00及之后取车收费8000,但你的代码只判断了hour2<18和hour2>18,完全没处理hour2==18的场景,这种情况会直接跳过费用计算,无输出。
3. 条件分支结构冗余且有逻辑漏洞
多个独立的if语句可能导致逻辑混乱,比如时间相同时输出0后,后续条件仍会被判断(虽然不会产生额外输出,但结构不严谨),应该用else if形成完整的分支链,避免冗余判断。
修复后的代码
#include <stdio.h> int main() { int hour1, min1; int hour2, min2; // 读取HH:MM格式的两个时间 scanf("%d:%d %d:%d", &hour1, &min1, &hour2, &min2); // 先判断时间合法性:小时0-23,分钟0-59 if (hour1 >= 0 && hour1 < 24 && hour2 >=0 && hour2 <24 && min1 >=0 && min1 <=59 && min2 >=0 && min2 <=59) { // 判断入场时间是否晚于离场时间(含过夜情况) if ((hour1 > hour2) || (hour1 == hour2 && min1 > min2)) { printf("-1"); } // 判断入场离场时间相同 else if (hour1 == hour2 && min1 == min2) { printf("0"); } // 计算停车费 else { // 18:00及之后取车 if (hour2 > 18 || (hour2 == 18 && min2 >= 0)) { printf("8000"); } // 18:00之前取车 else { printf("5000"); } } } // 可选:如果题目要求非法输入输出特定内容,可在此添加 // else { // printf("Invalid time"); // } return 0; }
额外优化说明
- 把两次
scanf合并成一次,更符合输入格式(输入是两个HH:MM时间,用空格分隔),原代码的两次scanf在输入时如果用户直接输入12:00 13:35也能工作,但合并后逻辑更清晰。 - 调整条件分支为完整的
else if链,避免冗余判断,逻辑更严谨。 - 明确处理了
18:00整的情况,完全符合题目规则。
内容的提问来源于stack exchange,提问作者NgoMinh
相关产品推荐
相关产品推荐

