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

C语言用户输入二维数组代码输出异常问题咨询

问题分析与修复方案

核心错误点

  • 变长数组使用时机错误:C语言中,变长数组(VLA)的大小依赖的变量必须先完成初始化。你在定义int a[m][n];时,m和n还是未赋值的局部变量,值为随机垃圾值,导致数组实际大小和后续输入的3x3完全不匹配,后续读写元素时触发内存越界,覆盖其他内存区域,最终输出乱码。
  • 输出格式缺失分隔符:输出矩阵时没有添加空格或换行,所有数字连在一起;且程序结束前未输出换行,终端提示符(如%)直接跟在输出内容后,造成视觉混淆。

修复后的代码

#include<stdio.h>

int main()
{
    int i,j,m,n;

    // 先获取行列数,再定义变长数组
    printf("enter the row of matrix:");
    scanf("%d", &m);

    printf("enter the column of matrix:");
    scanf("%d",&n);

    int a[m][n]; // 此时m和n已被正确赋值

    printf("enter the elements\n");

    for(i=0;i<m;i++)
    {
        for(j=0;j<n;j++)
        {
            scanf("%d", &a[i][j]);
        }
    }

    printf("your matrix is :\n");

    for(i=0;i<m;i++)
    {
        for(j=0;j<n;j++)
        {
            printf("%d ", a[i][j]); // 添加空格分隔元素
        }
        printf("\n"); // 每行结束后换行,保持矩阵格式
    }
    return 0; // 规范添加main函数返回值
}

修复说明

  1. 调整变长数组定义位置:把int a[m][n];移到scanf获取m和n之后,确保数组大小是用户输入的合法值,彻底避免内存越界问题。
  2. 优化输出格式:每个元素后添加空格%d ,每行输出结束后添加换行,让矩阵格式清晰;程序末尾的换行也能避免终端提示符和输出内容混在一起。
  3. 补充标准返回值:给main函数添加return 0;,符合C语言标准规范。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 03:43:13