C语言实现打印矩阵每行最大值代码运行输出异常求助
问题排查与修正方案
现有代码的错误点
- 类型不匹配错误:
int *input3[9]是指针数组,用来存储整型地址,你直接存入整数值属于非法操作,应改为普通整型数组int input3[9]。 - 变量未初始化:
Next_Total声明时未赋初始值,存储的是内存随机垃圾值,后续大小比较逻辑完全失效。 - 逻辑不匹配需求:你的需求是打印矩阵每行的最大值,但现有代码实际是在计算每行的累加和,和需求完全不符。
- 累加逻辑错误:即使你要实现「找行和最大的行」的功能,
Total变量在每一行遍历结束后没有重置为0,会把前几行的和累计到当前行的结果中,计算结果完全错误。 - 输出格式错误:内层循环中每次更新
Total就直接打印且没有分隔符,多次输出的数字拼接在一起,就形成了你看到的超长异常数值,本质是多个数字连续输出的视觉效果,不是单次输出的结果。
修正后代码(实现打印每行最大值的需求)
#include<stdio.h> int main() { int m=3,n=3,k=0,i,j; // 修正指针数组为普通整型数组 int input3[9]={3,6,9,1,4,7,2,8,9}; int arr[m][n]; // 给二维数组赋值 for(i=0;i<m;i++){ for(j=0;j<n;j++){ arr[i][j]=input3[k++]; } } // 打印原始矩阵 printf("原始矩阵:\n"); for(i=0;i<m;i++){ for(j=0;j<n;j++){ printf("%d ", arr[i][j]); } printf("\n"); } // 求每行最大值并打印 printf("每行最大值如下:\n"); for(i=0;i<m;i++){ // 每行初始最大值设为行首元素 int row_max = arr[i][0]; for(j=1;j<n;j++){ if(arr[i][j] > row_max){ row_max = arr[i][j]; } } printf("第%d行最大值:%d\n", i+1, row_max); } return 0; }
内容的提问来源于stack exchange,提问作者Satyam Singh
相关产品推荐
相关产品推荐

