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函数返回值 }
修复说明
- 调整变长数组定义位置:把
int a[m][n];移到scanf获取m和n之后,确保数组大小是用户输入的合法值,彻底避免内存越界问题。 - 优化输出格式:每个元素后添加空格
%d,每行输出结束后添加换行,让矩阵格式清晰;程序末尾的换行也能避免终端提示符和输出内容混在一起。 - 补充标准返回值:给main函数添加
return 0;,符合C语言标准规范。
内容的提问来源于stack exchange,提问作者neerajrawat
相关产品推荐
相关产品推荐

