提问大佬,为什么最后结果什么也没有,怎么改正呀?

//题目:输入1 个正整数 n (1≤n≤6)和n 阶方阵a中的元素,如果a的每一行的最大元素值都相等, 输出YES;, 否则, 输出NO。例:输入:3 -1 -2 -3 -10 -2 -1 -8 -1 -2 输出:YES
#include<stdio.h>
int k_compare(int a[6][6]);
int main()
{
int i,j,n,k;
int a[6][6];
scanf("%d",&n);
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
scanf("%d",&a[i][j]);
}
k=k_compare(a);
if(k==1)
printf("YES");
if(k==0)
printf("NO");
}
int k_compare(int a[6][6])
{
int i,j,k,n;
for(i=0;i<n;i++)
{
a[i][n]=a[i][0];
for(j=0;j<n;j++)
{
if(a[i][j]>=a[i][n])
a[i][n]=a[i][j];
}
}
for(i=0;i<n;i++)
{
if(a[i][n]==a[0][n])
k=1;
else
{
k=0;
break;
}
return k;
}
}

错误有点多,我列举下

  1. 没有把n的取值传过来,在k_compare函数中n没有赋值
  2. return k 应该在for循环外面
  3. 数组大小应该为7,因为在n=6的时候你访问了下标6

改动处见注释,供参考:

#include<stdio.h>
int k_compare(int a[][7] ,int n);
int main()
{
    int i,j,n,k;
    int a[7][7];
    scanf("%d",&n);
    for(i=0;i<n;i++)
    {
        for(j=0;j<n;j++)
            scanf("%d",&a[i][j]);
    }
    k=k_compare(a,n);
    if(k==1)
        printf("YES");
    if(k==0)
        printf("NO");
    return 0;
}
int k_compare(int a[][7] ,int n)
{
    int i,j,k,*max=(int*)malloc(sizeof(int)*n);     //,n;
    for(i=0;i<n;i++)
    {
        max[i] = a[i][0]; //a[i][n]=a[i][0];
        for(j=0;j<n;j++)
        {
            if(a[i][j]>max[i])
                max[i] = a[i][j]; //a[i][n]=a[i][j];
        }
    }
    for(i=0,k=1;i<n-1;i++)
    {
        if (max[i] != max[i+1])   //(a[i][n]==a[0][n])
            //k=1;
            //else
        {
            k=0;
            break;
        }
    }
    return k;
}