为什么结果相同却显示答案错误?这段代码哪里有问题?

问题遇到的现象和发生背景

img


img


img

问题相关代码,请勿粘贴截图
#include<stdio.h>
int main()
{
    int t,n,i=0,j=0,k=0,flag=0;
    scanf("%d",&t);
    for(i=0;i<t;i++)
    {
        scanf("%d",&n);
        int a[n][n];
        for(j=0;j<n;j++)
        {
            for(k=0;k<n;k++)
            {
                scanf("%d",&a[j][k]);
                if(j>k&&a[j][k]!=0)
                flag=1;
            }
        }
        if(flag)
        printf("NO\n");
        else printf("YES\n");
    }
    return 0;
 } 

运行结果及报错内容

img

img

我的解答思路和尝试过的方法

请问我的代码哪里出错了?

我想要达到的结果

修改如下,供参考:

#include<stdio.h>
#define N 11
int main()
{
    int t,n,i=0,j=0,k=0,flag=0,a[N][N];
    scanf("%d",&t);
    while(t--)  //for(i=0;i<t;i++)
    {
        scanf("%d",&n);
        for(j=0,flag=0;j<n;j++) //for(j=0;j<n;j++)
        {
            for(k=0;k<n;k++)
            {
                scanf("%d",&a[j][k]);
                if(j>k&&a[j][k]!=0)
                    flag=1;
            }
        }
        if(flag)
            printf("NO\n");
        else
            printf("YES\n");
    }
    return 0;
 }

你应该在t的每次循环里重新设置flag=0;,否则的话,上次flag的结果有可能影响下次输出。

框中可能有些错误:框中输入t,然后t等于2及2以上的,会输入多次n,数组的大小会改变多次。

img

以上仅供参考,如有任何疑问,可以评论回复,看到即回。
希望对题主有所帮助!可以的话,点个采纳!