第一个代码的结果是怎么来的,还是随机的

这两个代码输出的结果为什么不一样?(我想要的就是第二种答案,第一种错哪里了)

# include<stdio.h>
int main()
{
    int i,j,a[4][5],row,col,max;
    for(i = 0;i<4;i++)
 {
    for(j = 0;j<5;j++)
    scanf("%d",&a[i][j]);
    max = a[0][0];
 
    if(max<a[i][j])
    {
    max = a[i][j];
    row = i;
    col = j;
    }
 }
   printf("%d row=%d col=%d",max,row+1,col+1);
    return 0;
}

img

# include<stdio.h>

int main()

{

    int i,j,a[4][5],row,col,max;

    for(i = 0;i<4;i++)

    for(j = 0;j<5;j++)

    scanf("%d",&a[i][j]);

    max = a[0][0];

    for(i = 0;i<4;i++)

 {

    for(j = 0;j<5;j++)

    if(max<a[i][j])

    {

    max = a[i][j];

    row = i;

    col = j;

    }

 }

   printf("%d row=%d col=%d",max,row+1,col+1);

    return 0;

}

​

img

#include<stdio.h>
int main()
{
    int i, j, a[4][5], row, col, max=-10000;
    for (i = 0; i < 4; i++)
    {
        for (j = 0; j < 5; j++)
        {
            scanf("%d", &a[i][j]);
            if (max < a[i][j])
            {
                max = a[i][j];
                row = i;
                col = j;
            }
        }
    }
    printf("%d row=%d col=%d", max, row + 1, col + 1);
    return 0;
}

这一段不能写在for循环里面
max = a[0][0];
if (max < a[i][j])
{
max = a[i][j];
row = i;
col = j;
}
内层循环退出后j = 5
a[i][j]会越界

最大值初赋值放循环外面,否则每次循环最大值都为第一个元素了

# include<stdio.h>
int main()
{
    int i,j,a[4][5]={0},row,col,max;
    max = a[0][0];
    for(i = 0; i<4; i++)
    {
        for(j = 0; j<5; j++)
        scanf("%d",&a[i][j]);
        if(max<a[i][j])
        {
            max = a[i][j];
            row = i;
            col = j;
        }
    }
    printf("%d row=%d col=%d",max,row+1,col+1);
    return 0;
}


第一种错在将max = a[0][0];放在循环里,这样每次输入,都会重新将 a[0][0]赋给max,max存储的不一定是当前的最大值

找最大值和输入值放在一起,输入的数还在缓存中没读出来,所以会出错

# include<stdio.h>
int main()
{
    int i,j,a[4][5],row,col,max;

    for(i = 0; i<4; i++)
    {
        for(j = 0; j<5; j++)
        {
            scanf("%d",&a[i][j]);
        }
    }
    max = a[0][0];
    for(i = 0; i<4; i++)
    {
        for(j = 0; j<5; j++)
        {
            if(max<a[i][j])
            {
                max = a[i][j];
                row = i;
                col = j;
            }
        }
    }
    printf("max:%d row=%d col=%d",max,row+1,col+1);
    return 0;
}

可是他那个max = a[0][0]怎么读出来了