如何用递归实现C语言多行字符存入二维数组?(作业求助)
递归实现字符存入二维数组的正确方法
问题说明
这是大学作业任务,要求用递归完成字符存入二维数组的功能。目前用循环实现时存在输入处理问题,现提供现有代码,需替换为递归实现。
现有代码的问题
- 输入逻辑混乱:
getchar()和scanf("%c")重复读取,且do-while循环条件未正确更新,会导致死循环或错误读取。 - 未处理输入缓冲区的换行符:
scanf("%d %d")读取行列数后,缓冲区残留的换行符会被后续scanf("%c")读取,导致数组存入无效字符。 - 未使用递归,不符合作业要求。
递归实现方案
递归按行优先顺序遍历数组:每次递归处理一个位置的字符,处理完当前行的所有列后,递归处理下一行,直到所有行处理完成。
完整代码
#include <stdio.h> // 递归填充二维数组的函数 void fillMatrix(char matrix[][100], int rows, int cols, int currentRow, int currentCol) { // 终止条件:所有行处理完成 if (currentRow >= rows) { return; } // 当前行的所有列处理完成,切换到下一行,列重置为0 if (currentCol >= cols) { fillMatrix(matrix, rows, cols, currentRow + 1, 0); return; } // 读取当前位置的字符(前面的空格跳过空白字符) scanf(" %c", &matrix[currentRow][currentCol]); // 递归处理下一列 fillMatrix(matrix, rows, cols, currentRow, currentCol + 1); } int main() { int numberOfRows, numberOfCols; // 读取行列数 scanf("%d %d", &numberOfRows, &numberOfCols); // 定义二维数组(若需更灵活可改用动态内存分配) char matrix[numberOfRows][100]; // 调用递归函数填充数组,从第0行第0列开始 fillMatrix(matrix, numberOfRows, numberOfCols, 0, 0); // 打印验证结果 printf("填充后的数组:\n"); for (int i = 0; i < numberOfRows; i++) { for (int j = 0; j < numberOfCols; j++) { printf("%c ", matrix[i][j]); } printf("\n"); } return 0; }
代码关键点说明
- 递归终止条件:当
currentRow等于总行数时,所有元素已填充,递归结束。 - 行切换逻辑:当
currentCol等于总列数时,递归进入下一行,列号重置为0。 - 输入处理:
scanf(" %c", ...)中的空格会自动跳过输入中的空白字符(换行、空格、制表符),避免读取无效字符。 - 若要突破固定列数限制,可改用
malloc动态分配二维数组内存,递归逻辑保持不变。
内容的提问来源于stack exchange,提问作者Justus148
相关产品推荐
相关产品推荐

