C语言如何读取字母矩阵文件并根据用户输入坐标获取对应字符
坐标匹配功能实现方案
首先在代码开头补充字符串处理所需的头文件:
#include <string.h>
- 第一步:读取文件矩阵到内存二维数组
在你原有fopen成功的逻辑后,添加如下代码,将文件中的矩阵逐行读取到二维数组中,同时记录矩阵的行数和列数:
char matrix[MAX][MAX] = {0}; int rows = 0, cols = 0; // 逐行读取文件内容存入矩阵 while (fgets(matrix[rows], MAX, input) != NULL) { // 移除每行末尾的换行符,避免影响字符匹配 char *newline_ptr = strchr(matrix[rows], '\n'); if (newline_ptr != NULL) { *newline_ptr = '\0'; } // 以第一行的长度作为矩阵列数 if (rows == 0) { cols = strlen(matrix[rows]); } rows++; } // 矩阵读取完成后关闭文件 fclose(input);
- 第二步:接收用户输入坐标并做合法性校验
需要先和用户约定坐标计数规则,普通用户通常默认行号、列号从1开始计数,读取后转换为数组0索引即可,同时要校验坐标是否在矩阵范围内,避免数组越界:
int input_row, input_col; printf("请输入坐标(行号 列号,空格分隔):"); // 校验输入格式合法性 while (fscanf(stdin, "%d %d", &input_row, &input_col) != 2) { // 清空错误输入的缓冲区 while (getchar() != '\n'); printf("输入格式错误,请重新输入行号和列号:"); } // 1计数转0计数,如果约定坐标从0开始可删除下面两行 input_row -= 1; input_col -= 1; // 校验坐标是否在矩阵范围内 if (input_row < 0 || input_row >= rows || input_col < 0 || input_col >= cols) { printf("输入坐标超出矩阵范围,程序退出\n"); return 1; }
- 第三步:匹配矩阵字符判断游戏结果
直接通过索引取对应位置的字符,结合你的游戏规则做判断即可,示例规则如下:
char target_char = matrix[input_row][input_col]; if (target_char == 'B') { printf("游戏失败:该坐标对应字符为B\n"); } else if (target_char == 'S') { printf("游戏胜利:该坐标对应字符为S\n"); } else { printf("无匹配规则:该坐标对应字符为%c\n", target_char); }
补充说明:
- 需要保证输入的矩阵文件每行长度一致,否则会出现坐标匹配错位问题
- 如果矩阵最大尺寸超过1000*1000,需要调整MAX宏的定义数值
- 如果需要支持用户多次输入坐标查询,可以把坐标输入、校验、判断的逻辑套入循环结构即可
内容的提问来源于stack exchange,提问作者Mike8490
相关产品推荐
相关产品推荐

