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

如何在C语言中通过CMD读取文件整数?解决程序无输出问题

C语言读取文件整数:无输出阻塞问题修复方案

问题现象

执行命令c_file.exe input.txt后,程序无任何输出,终端陷入无法输入的阻塞状态。

问题根源

  1. feof的误用:while(!feof(file))的写法逻辑错误,feof仅在尝试读取越过文件末尾后才会标记文件结束,导致最后一次循环会执行无效读取,若文件打开失败还会触发死循环。
  2. 未校验文件打开状态:如果fopen因文件不存在、权限不足等原因失败,file会被赋值为NULL,后续对NULL文件指针的操作会引发未定义行为,直接导致程序异常阻塞。
  3. 输出无缓冲刷新:原代码输出无换行,终端输出缓冲区可能未及时刷新,即使程序正常执行也会看起来像无输出。

修复后的完整代码

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

int main(int argc, char *argv[]) {
    int x;
    int sum = 0;
    int count = 0;

    if (argc == 1) {
        printf("错误:未指定输入文件\n");
        return 1;
    }

    FILE* file = fopen(argv[1], "r");
    if (file == NULL) {
        printf("错误:无法打开文件 %s\n", argv[1]);
        return 1;
    }

    // 通过fscanf返回值判断是否成功读取整数
    while (fscanf(file, "%d", &x) == 1) {
        sum += x;
        count++;
    }

    printf("总和:%d\n", sum);
    printf("整数个数:%d\n", count);

    fclose(file);
    return 0;
}

关键修复说明

  • 替换循环终止条件:用fscanf(file, "%d", &x) == 1替代!feof(file),fscanf成功读取一个整数时返回1,读取到末尾或失败时返回其他值,精准终止循环。
  • 添加文件打开校验:检查file是否为NULL,若打开失败直接输出错误信息并退出,避免后续非法操作。
  • 关闭文件资源:使用fclose关闭文件,防止资源泄漏。
  • 优化输出格式:添加描述文本和换行,既让结果更易读,也确保终端缓冲区及时刷新输出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 00:16:11