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

C语言如何读取txt文件第二行及之后的数字并存入数组

C语言读取txt第二行及以后数字存入数组实现方案

你已经通过首次fscanf完成了第一行两个整数的读取,此时文件指针已经自动移动到第一行末尾,后续直接循环读取整数即可,不需要额外做行跳转操作。注意不要固定循环MAX次,必须根据读取返回值判断文件状态,避免读入无效数据或数组越界。

核心修改点

  • 补充缺失的头文件#include <stdio.h>,否则文件操作、打印相关函数会触发编译错误
  • 新增actualCount变量记录实际读取到的有效数字个数,不要硬编码MAX作为有效数据长度
  • 循环读取时判断fscanf返回值:成功匹配到1个整数时存入数组,计数+1;遇到文件尾或格式错误时直接跳出循环,最多读取MAX个防止数组越界
  • 原代码首次fscanf末尾的\n无实际作用,fscanf会自动跳过换行、空格等所有空白符,可直接删除
  • 原变量名listOfNumers存在拼写错误,修正为listOfNumbers,不修正也可正常运行但可读性差

完整修正后代码

#define MAX 50
#include <stdio.h>

int main (void){
    FILE *file;
    int primNum;
    int secNum;
    int listOfNumbers[50];
    int actualCount = 0;
    int i = 0;

    file = fopen("file.txt", "rt");
    if (file == NULL)
    {
        printf("Open file error\n");
        return 1;
    }

    // 读取第一行两个参数
    fscanf(file, "%d %d", &primNum, &secNum);
    printf("1st Number: %d\n", primNum);
    printf("2nd Number: %d\n", secNum);

    printf("List of Numbers:\n");
    // 读取第二行及以后的数字
    for(i = 0; i < MAX; i++){
        int readRet = fscanf(file, "%d", &listOfNumbers[i]);
        if (readRet != 1) {
            break;
        }
        actualCount++;
    }

    // 打印所有读取到的数字
    for(i = 0; i < actualCount; i++){
        printf("%d\n", listOfNumbers[i]);
    }

    fclose(file);
    return 0;
}

运行效果(匹配提供的txt示例)

1st Number: 10
2nd Number: 20
List of Numbers:
45000000
48000000
56000000

补充说明:示例中第二行起最大数字为56000000,在4字节int的可存储范围内(最大支持2147483647),如果后续需要读取更大的数值,可将数组类型替换为long或long long。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 04:57:11