You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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;
}

关键修正说明

  1. 给时间转换函数添加输入校验,避免读取失败时返回垃圾值;
  2. 在计算违规时长前先验证输入有效性,防止无效值参与运算;
  3. 明确初始化存储时间的变量,杜绝内存垃圾值干扰。

内容的提问来源于stack exchange,提问作者Pro Plaier

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 15:05:33