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

如何优化考试用C语言程序代码以避免Time Limit Error(超时错误)

解决C语言程序超时问题的优化方案

首先一眼就揪出了导致超时的核心问题:你用"w"模式打开input.txt了!这个模式是写入模式,会直接清空文件甚至创建新空文件,根本没办法读取原有内容。fscanf在这种场景下会一直读取失败,变量a的初始值是未定义的随机值,如果这个随机值不是0,程序就会陷入无限死循环,直接触发Time Limit Error。

下面是修复并优化后的完整代码:

#include <stdlib.h>
#include <stdio.h>

int main() {
    int a, sum = 0, count = 0;
    double average;

    // 以只读模式打开输入文件,这是读取内容的正确姿势
    FILE *file1 = fopen("input.txt", "r");
    if (file1 == NULL) {
        fprintf(stderr, "无法打开输入文件 input.txt\n");
        return EXIT_FAILURE;
    }

    // 循环读取:只有成功读到整数且数值不是0时,才累加计数
    while (fscanf(file1, "%d", &a) == 1 && a != 0) {
        sum += a;
        count++;
    }
    fclose(file1);

    // 防御性判断:避免没有有效数据时出现除以0的崩溃
    if (count == 0) {
        fprintf(stderr, "没有有效的输入数据\n");
        return EXIT_FAILURE;
    }

    average = (double)sum / count;
    printf("%.2f\n", average); // 可指定小数位数让输出更规整

    // 写入输出文件,同时增加打开失败的判断
    FILE *file2 = fopen("output.txt", "w");
    if (file2 == NULL) {
        fprintf(stderr, "无法打开输出文件 output.txt\n");
        return EXIT_FAILURE;
    }
    fprintf(file2, "%.2f", average);
    fclose(file2);

    return EXIT_SUCCESS;
}

关键改进说明:

  • 修复文件打开模式:将input.txt的打开模式从"w"改为"r"(只读模式),确保能正确读取文件内容。
  • 添加错误处理:检查文件是否成功打开,避免因文件不存在、权限不足等问题导致的隐藏错误。
  • 优化循环逻辑:直接通过fscanf的返回值判断读取是否成功,彻底避免死循环的可能。
  • 变量类型优化:用整数类型count代替浮点型i计数更合理;用double计算平均值,提升精度。
  • 防御性编程:增加count为0的判断,防止没有有效输入时出现除以0的崩溃。
  • 输出格式优化:指定小数位数(如%.2f)让输出更规范美观。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 09:19:45