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

矩阵程序中for循环运行异常的问题排查与修复请求

修复矩阵程序中循环迭代异常与数组越界问题

问题根源

你的代码核心错误在于循环内的三维数组声明完全错误:

int x[m][row[m]][column[m]];

当第一次循环m=0时,这个数组的第一个维度是0,直接导致内存布局混乱。后续通过scanf写入数组元素时,会越界覆盖到其他变量的内存(比如column[m]的值),这就是为什么你设置了2列,最终却变成3列的原因。

另外,你其实不需要用三维数组存储单个矩阵——每个矩阵是独立的二维结构,用二维数组处理即可。

修复后的代码

#include <stdio.h>

int main()
{
    int matrix;
    printf("ENTER NUMBER OF MATRICES\n");
    scanf("%d", &matrix);
    int row[matrix], column[matrix];

    for (int m = 0; m < matrix; m++) {
        printf("ENTER NUMBER OF ROWS IN %d MATRICE\n", m + 1);
        scanf("%d", &row[m]);
        printf("ENTER NUMBER OF COLUMNS IN %d MATRICE\n", m + 1);
        scanf("%d", &column[m]);
        // 用二维数组存储当前矩阵,匹配行列维度
        int x[row[m]][column[m]];
        int g = 1;

        printf("ENTER ALL ELEMENT LEFT TO RIGHT\n");
        for (int j = 0; j < row[m]; j++) {
            for (int u = 0; u < column[m]; u++) {
                printf("%d\n", g);
                scanf("%d", &x[j][u]);
                g++;
            }
        }
        // 打印矩阵
        for (int k = 0; k < row[m]; k++) {
            printf("|");
            for (int l = 0; l < column[m]; l++) {
                printf("%d", x[k][l]);
                if (l < column[m] - 1) {
                    printf("  ");
                }
            }
            printf("|\n");
        }
    }
    return 0;
}

修改说明

  1. 移除错误的三维数组声明,替换为当前矩阵对应的二维数组int x[row[m]][column[m]],彻底避免内存越界覆盖变量的问题。
  2. 移除了多余的getchar():scanf("%d")会自动跳过输入中的空白字符(包括换行、空格),手动清理缓冲区反而可能引发输入异常。
  3. 修正数组访问索引:将x[m][j][u]改为x[j][u],符合二维矩阵的访问逻辑。

测试效果

输入1个1行2列的矩阵时,程序会正确请求2个元素,最终输出|3 4|,与预期完全一致。

内容的提问来源于stack exchange,提问作者vatsal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 17:47:01