如何用C语言实现每15分钟循环输出时间并修复无限循环问题
问题修复说明
死循环根本原因
for循环的步进段仅写了i+900,没有将计算结果赋值给变量i,导致i的值全程没有变化,始终满足i <= endtime的循环判断条件,程序就会无限运行。
修正方式:将for循环的步进表达式改为i += 900。
其他功能异常问题修复
你的代码还存在几处逻辑错误,会导致输出结果不符合要求,同步修复如下:
- 秒数计算错误:当前
sec = i - min的逻辑完全错误,总秒数转「分钟+秒」的正确逻辑为:min = i / 60; sec = i % 60; - 输出格式不符合要求:需要输出
mm:ss格式,应该使用%02d:%02d作为格式化占位符,自动给个位数的分钟、秒补前导0。 - 结束时间精度问题:
endtime声明为int类型,但(distance/90)*3600是浮点运算,直接赋值给int会自动截断小数部分,可能导致最后一个时间点无法输出,可根据需求做四舍五入/向上取整处理。
修正后的核心代码片段
timesec = hour*3600 + min*60 + sec; // 结束时间计算加0.5做四舍五入,避免精度截断丢失最后一个周期 endtime = timesec + (int)((distance/90)*3600 + 0.5); printf("Starting time | Fare(%.1fkm)\n", distance); // 修正步进表达式 for (int i=timesec; i<=endtime; i += 900) { min = i/60; sec = i % 60; // 修正秒数计算 printf("%02d:%02d | $XX.yy\n", min, sec); // 修正格式化输出 }
内容的提问来源于stack exchange,提问作者Hello
相关产品推荐
相关产品推荐

