二维整数数组最大值获取:行列输出与预期不符问题排查
问题原因分析及解决办法
你的问题核心是行列索引的顺序搞混了,常见的几个错误场景如下:
1. 输入行列时顺序颠倒
如果你的代码里读取行列的代码是这样的:
int cols, rows; scanf("%d,%d", &cols, &rows); // 先读列数,再读行数
那输入2,1时,cols会被设为2,rows设为1,后续数组存储和遍历的逻辑就完全错了。正确的应该是先读行数再读列数:
int rows, cols; scanf("%d,%d", &rows, &cols);
2. 数组访问时行列索引反了
C语言中二维数组的访问顺序是arr[行索引][列索引],如果你的代码里写成了arr[列索引][行索引],比如:
// 错误示例:把j当行,i当列 for (int i = 0; i < cols; i++) { for (int j = 0; j < rows; j++) { scanf("%d", &arr[j][i]); if (arr[j][i] > max) { max = arr[j][i]; row = j + 1; // 这里的j实际是列索引 col = i + 1; // i实际是行索引 } } }
这样遍历和赋值时就把行列完全搞反了。正确的应该是外层循环遍历行,内层遍历列:
for (int i = 0; i < rows; i++) { for (int j = 0; j < cols; j++) { scanf("%d", &arr[i][j]); if (arr[i][j] > max) { max = arr[i][j]; row = i + 1; // 行号从1开始计数 col = j + 1; // 列号从1开始计数 } } }
3. 记录行列的变量赋值错误
如果遍历顺序是对的,但更新行列变量时搞反了,比如:
if (arr[i][j] > max) { max = arr[i][j]; row = j + 1; // 错误:把列索引赋给了行变量 col = i + 1; // 错误:把行索引赋给了列变量 }
这也会导致输出的行列颠倒,修正成row = i+1; col = j+1即可。
你可以对照自己的代码,检查这几个常见的错误点,基本上就能解决行列颠倒的问题。
内容的提问来源于stack exchange,提问作者a student
相关产品推荐
相关产品推荐

