24小时制火车行程时长计算C++代码调试求助
问题原因
- 核心逻辑错误:你直接对四位格式的时间数值做减法,得到的是十进制数值差,不是实际时间差。例如1900减1850得到的十进制结果是50,但对应时间差的计算需要按60进制处理,不能直接按数位拆分差值。
- 语法错误:最后输出语句里的变量写的是
Minutes,但你定义的变量名是小写的mins,大小写不匹配会直接编译报错。 - 边界处理逻辑错误:你写的
if(mins > 60)判断完全不符合场景,跨小时的时间差值按你的原逻辑拆分后分钟会是负数,根本不会出现大于60的情况。
修正思路
统一把两个时间转换为从当日0点开始的总分钟数,计算差值后再拆分回小时和分钟,就能避开60进制和100进制的转换问题:
- 从四位输入值中拆分出小时和分钟:小时为数值除以100取整,分钟为数值对100取余
- 分别计算出发、到达时间的总分钟数:小时*60 + 分钟
- 总分钟差值 = 到达总分钟 - 出发总分钟
- 总差值除以60取整得到小时数,对60取余得到分钟数
修正后的代码
#include <iostream> using namespace std; int main() { int totalDiff, mins, hours, arrTime, depTime; int depHours, depMins, arrHours, arrMins; cout << "\nDeparture: "; cin >> depTime; cout << "\nArrival: "; cin >> arrTime; // 转换出发时间为总分钟 depHours = depTime / 100; depMins = depTime % 100; int depTotal = depHours * 60 + depMins; // 转换到达时间为总分钟 arrHours = arrTime / 100; arrMins = arrTime % 100; int arrTotal = arrHours * 60 + arrMins; totalDiff = arrTotal - depTotal; hours = totalDiff / 60; mins = totalDiff % 60; cout << "Hours: " << hours << " Minutes: " << mins; return 0; }
内容的提问来源于stack exchange,提问作者Andrew King
相关产品推荐
相关产品推荐

