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

如何用递归实现C语言多行字符存入二维数组?(作业求助)

递归实现字符存入二维数组的正确方法

问题说明

这是大学作业任务,要求用递归完成字符存入二维数组的功能。目前用循环实现时存在输入处理问题,现提供现有代码,需替换为递归实现。

现有代码的问题

  1. 输入逻辑混乱:getchar()和scanf("%c")重复读取,且do-while循环条件未正确更新,会导致死循环或错误读取。
  2. 未处理输入缓冲区的换行符:scanf("%d %d")读取行列数后,缓冲区残留的换行符会被后续scanf("%c")读取,导致数组存入无效字符。
  3. 未使用递归,不符合作业要求。

递归实现方案

递归按行优先顺序遍历数组:每次递归处理一个位置的字符,处理完当前行的所有列后,递归处理下一行,直到所有行处理完成。

完整代码

#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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 17:25:50