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

如何用fscanf从文本文件读取数据存入两个3×3二维数组?

解决从文件读取两个3×3矩阵的问题

核心思路

要读取两行各9个整数到两个3×3二维数组,关键是利用fscanf自动跳过空白字符(空格、换行)的特性,按顺序读取数值,再通过嵌套循环将数值映射到二维数组的行列索引中。

正确实现代码

#include <stdio.h>

int main() {
    FILE *file = fopen("Matrices.txt", "r");
    if (file == NULL) {
        perror("无法打开文件");
        return 1;
    }

    int mat1[3][3], mat2[3][3];
    int i, j;

    // 读取第一个3×3矩阵
    for (i = 0; i < 3; i++) {
        for (j = 0; j < 3; j++) {
            fscanf(file, "%d", &mat1[i][j]);
        }
    }

    // 读取第二个3×3矩阵
    for (i = 0; i < 3; i++) {
        for (j = 0; j < 3; j++) {
            fscanf(file, "%d", &mat2[i][j]);
        }
    }

    fclose(file);

    // 打印第一个矩阵验证
    printf("第一个矩阵:\n");
    for (i = 0; i < 3; i++) {
        for (j = 0; j < 3; j++) {
            printf("%d ", mat1[i][j]);
        }
        printf("\n");
    }

    // 打印第二个矩阵验证
    printf("\n第二个矩阵:\n");
    for (i = 0; i < 3; i++) {
        for (j = 0; j < 3; j++) {
            printf("%d ", mat2[i][j]);
        }
        printf("\n");
    }

    return 0;
}

关键说明

  • fscanf无需关心数值在文件中的换行位置,只要数值顺序正确就能完成读取。
  • 打开文件后必须检查返回值,避免空指针操作导致程序崩溃。
  • 二维数组mat[i][j]对应第i行第j列,嵌套循环按行优先读取,正好匹配文件中一行9个数值的存储逻辑。

常见错误排查

如果你的原有代码存在逻辑问题,大概率是以下情况之一:

  • 未检查文件打开结果,直接操作空指针。
  • 循环索引错误,比如行列顺序搞反、循环次数不符合3×3的要求。
  • 调用fscanf时忘记传入变量地址(漏写&),导致无法将读取的数值存入数组。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 09:45:38