如何读取TXT文件并将内容存入二维数组(矩阵)?
读取TXT矩阵到二维数组的高效实现
你需要将TXT文件中的矩阵数值存入二维数组,原代码仅读取了每行字符串但未解析数值,因此无法访问数组元素。无需使用strtok(),用fscanf()或sscanf()就能更简洁地解决问题。
原代码的核心问题
- 数组维度错误:示例TXT是5行4列,你定义的
int matrix[4][5];维度写反,会导致后续操作越界。 - 未解析数值:仅用
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
相关产品推荐
相关产品推荐

