输出n*n阶螺旋方阵,可是输入没显示方阵

#include<stdio.h>
int main()
{
  int a[10][10];
  int n=0,i=0,j=0;
  int num=1,flag=1;
  scanf("%d",&n);
  for(i=0;i<n;i++)
  {
    for(j=0;j<n;j++)
    {
      a[i][j]=-1;
    }
  }
  while(num<n*n)
  {
    if(a[i][j]==-1)
    {
      a[i][j]=num;
      num++;
    }
    if(flag==1)
    {
      j++;
      if(j==n||a[i][j]!=-1)
      {
        j--;
        flag=2;
      }
    }
    else if(flag==2)
    {
      i++;
      if(i==n||a[i][j]!=-1)
      {
        i--;
        flag=3;
      }
    }
    else if(flag==3)
    {
      j--;
      if(j==-1||a[i][j]!=-1)
      {
        j++;
        flag=4;
      }
    }
    else if(flag==4)
    {
      i--;
      if(i==-1||a[i][j]!=-1)
      {
        i++;
        flag=1;
      }
    }
  }
  for(i=0;i<n;i++)
  {
    for(j=0;j<n;j++)
    {
      printf("%2d",a[i][j]);
    }
    printf("\n");
  }
  return 0;
}


#include<stdio.h>
int main()
{
      int i,j,t=1;
      int a[7][7];
       int n=7;
        for (i = 0; i < n/2; i++) 
        {//最外层控制圈数
            for (j = i; j < n-1-i; j++) 
            {//上方       
                a[i][j]=t++;
            }
            for (j = i; j < n-1-i; j++) 
            {//右侧
                a[j][n-1-i]=t++;
            }
            for (j = n-1-i; j>i; j--) 
            {//下方
                a[n-1-i][j]=t++;
            }   
            for (j = n-1-i; j>i; j--) 
            {//左侧
                a[j][i]=t++;
            }
        }
        if(n%2==1) 
        {//n是奇数时,解决最中心数字未赋值问题
            a[n/2][n/2]=n*n;
        }
        for(i=0;i<n;i++)
        {
            
            for(j=0;j<n;j++)
            {
                printf("%3d",a[i][j]);
            }
            putchar('\n');
        }
        
        return 0; 
}

供参考:C语言 经典题目螺旋矩阵(https://www.jb51.net/article/98966.htm)