如何用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
相关产品推荐
相关产品推荐

