C语言程序计算违规时长出现错误值14705...求助
问题排查与解决
你遇到的14705...这类异常值,几乎都是未初始化变量导致的垃圾值,或是时间转换函数返回了未定义结果,以下是针对性的排查步骤和解决方案:
核心排查方向
- 验证函数返回值:在调用
horascomeco()和horasapanhado()后,立即打印它们的返回值,确认是否为预期的总分钟数。比如你预期违规1分钟,两个函数的返回值应相差1(如600和601)。如果打印出乱数,说明这两个函数内部的时间转换逻辑或输入读取存在问题。 - 检查变量初始化:确认
tempodemulta()中存储起始、查处时间的变量是否被正确赋值。如果直接声明变量却未通过函数返回值初始化,会导致内存垃圾值参与运算。 - 核对时间转换逻辑:检查
horascomeco()和horasapanhado()是否正确执行小时*60 + 分钟的转换,是否存在输入读取失败(比如用户输入格式错误,导致小时/分钟变量保留内存原始垃圾值)的情况。
修正参考代码
假设你的函数是读取用户输入的时间,以下是修正后的实现示例:
#include <stdio.h> // 获取时间并转换为总分钟数,添加输入校验 int get_total_minutes() { int hour, minute; // 确保输入格式正确(如10:01) if (scanf("%d:%d", &hour, &minute) != 2) { return -1; // 输入错误时返回无效标记 } return hour * 60 + minute; } // 计算违规时长 int tempodemulta() { int start_min = get_total_minutes(); int end_min = get_total_minutes(); // 先校验输入有效性 if (start_min == -1 || end_min == -1) { printf("时间输入格式错误\n"); return -1; } int minutosforadalei = end_min - start_min; // 处理跨天情况(如果需要) if (minutosforadalei < 0) { minutosforadalei += 24 * 60; } return minutosforadalei; } int main() { int result = tempodemulta(); printf("违规时长:%d分钟\n", result); return 0; }
关键修正说明
- 给时间转换函数添加输入校验,避免读取失败时返回垃圾值;
- 在计算违规时长前先验证输入有效性,防止无效值参与运算;
- 明确初始化存储时间的变量,杜绝内存垃圾值干扰。
内容的提问来源于stack exchange,提问作者Pro Plaier
相关产品推荐
相关产品推荐

