求二维数组的最大值最小值和位置

为什么输出的是这样呀,不应该是
123
456吗为什么第一行第二行的输出是相同的?导致本程序出不来预期效果

img

img

img

应该是因为定义存储输入数据的二维数组时用M和N来定义行和列,而此时M和N没有赋值,所以导致结果异常了,把定义二维数组放到获取了M和N的值后再定义即可,修改如下:

#include <stdio.h>

int main(void){
    
    int i=0,j=0,M,N,max,mai,e,b,c,d;
    
    
    printf("输入行和列:");
    scanf("%d%d",&M,&N);
    int a[M][N];
    
//    printf("M=%d,N=%d\n",M,N);
    printf("输入数组元素:");
    for(i=0;i<M;i++){
        for(j=0;j<N;j++){
            scanf("%d",&a[i][j]);
        }
    }
    
    mai=max=a[0][0];
    e=b=c=d=0;
    for(i=0;i<M;i++){
        for(j=0;j<N;j++){
            if(a[i][j]>=max){
                max=a[i][j];
                e=i+1;
                b=j+1;
            }
            if(a[i][j]<=mai){
                mai=a[i][j];
                c=i+1;
                d=j+1;
            }
        }    
    }
    
    for(i=0;i<M;i++){
        for(j=0;j<N;j++){
            printf("%-5d",a[i][j]);
        } 
        printf("\n");
    }
    
    printf("\n最大值:%d, 最小值:%d\n",max,mai);
    printf("最大值位置%d行,%d列\n",e,b);
    printf("最小值位置%d行,%d列\n",c,d);
    
    return 0;
} 

img