C语言奇数魔方阵问题

#include
  int main()
  {
      int a[10][10],i,j,n,k;
      scanf("%d",&n);//输入n阶 
      for(i=1;i<=n;i++)//初始化数组,防止一个单元格内重复填数 //int a[10][10]={0};//方便起见,i从1开始 
      {
          for(j=1;j<=n;j++)
          {
              a[i][j]=0;
          }
      } 
      a[1][n/2+1]=1; //n/2+1
      for(k=2;k<=n*n;k++)//布置数组 ,i,j代表上一个数 
      {
       i=i-1;//每个数上一个数的行数减一 
       j=j+1;//                列数加一 //从这里开始i,j就代表现在这个数 ,而不是上一个 
       if(i==0)
       {
           i=n;
        } 
        if(j>n)
        {
            j=1;
        }
        if(i==0&&j==n+1)//第一行第n列,把下一个数放在这个数的下面 
        {
            i=i+2;
            j=j-1; 
        }
        if(a[i][j]==0)
        {
            a[i][j]=k;
        }
        else
        {
            i=i+2;//一样的问题,i,j表示上一个数,应先将其还原,在按规律执行 
            j=j-1;
            a[i][j]=k;
        }
    }
    for(i=1;i<=n;i++)
      {
          for(j=1;j<=n;j++)
          {
          printf("%3d",a[i][j]);
           
          }
          printf("\n");
      }    
        return 0;  
  }

注释是我一开始写错的地方,不清楚逻辑哪里还有问题

i=i+2;//一样的问题,i,j表示上一个数,应先将其还原,在按规律执行
j=j-1;
a[i][j]=k;
你怎么保证i的值不大于10呢?比如本次循环i值为8