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

如何读取TXT文件并将内容存入二维数组(矩阵)?

读取TXT矩阵到二维数组的高效实现

你需要将TXT文件中的矩阵数值存入二维数组,原代码仅读取了每行字符串但未解析数值,因此无法访问数组元素。无需使用strtok(),用fscanf()或sscanf()就能更简洁地解决问题。

原代码的核心问题

  1. 数组维度错误:示例TXT是5行4列,你定义的int matrix[4][5];维度写反,会导致后续操作越界。
  2. 未解析数值:仅用fgets()读取了行字符串,但没有将字符串中的整数提取并存入数组。

方法一:直接用fscanf读取(推荐)

fscanf()会自动跳过空格、换行等空白符,直接按顺序读取所有整数,无需处理行结构,代码最简洁:

#include <stdio.h>

int main() {
    // 对应示例的5行4列矩阵
    int matrix[5][4];
    FILE *file = fopen("./matrix-samples/m-5-10-a.txt", "r");
    
    if (file == NULL) {
        printf("文件打开失败\n");
        return 1;
    }

    // 双层循环读取所有元素
    for (int i = 0; i < 5; i++) {
        for (int j = 0; j < 4; j++) {
            fscanf(file, "%d", &matrix[i][j]);
        }
    }

    fclose(file);

    // 测试访问单个元素(示例:第2行第3列,下标从0开始)
    printf("第2行第3列元素:%d\n", matrix[1][2]);

    // 打印整个矩阵验证
    printf("\n完整矩阵:\n");
    for (int i = 0; i < 5; i++) {
        for (int j = 0; j < 4; j++) {
            printf("%4d ", matrix[i][j]);
        }
        printf("\n");
    }

    return 0;
}

方法二:按行读取后解析(适合需处理行内容的场景)

如果需要对每行做额外处理,可先用fgets()读取整行,再用sscanf()解析该行的数值:

#include <stdio.h>

int main() {
    int matrix[5][4];
    FILE *file = fopen("./matrix-samples/m-5-10-a.txt", "r");
    char line[100];
    
    if (file == NULL) {
        printf("文件打开失败\n");
        return 1;
    }

    for (int i = 0; i < 5; i++) {
        if (fgets(line, sizeof(line), file) != NULL) {
            // 按格式解析该行的4个整数
            sscanf(line, "%d %d %d %d", &matrix[i][0], &matrix[i][1], &matrix[i][2], &matrix[i][3]);
        }
    }

    fclose(file);

    // 验证输出
    printf("第1行第1列元素:%d\n", matrix[0][0]);
    return 0;
}

两种方法都能让你直接访问数组中的单个元素,避免了strtok()的复杂字符串拆分操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 09:25:27