螺旋矩阵当n大于19时,程序输出错误

#include<stdio.h>

int main(){

int n;int count=1;int m;

scanf("%d",&m);n=m;

int a[m][m];int i;int j;

for(i=1;i<=m;i++){

    for(j=1;j<=m;j++){

        a[i][j]=1;    }

}    //构造一个二维数组

int u;

for(u=1;u<=n/2;u++){

for(i=u,j=u;j<=n-u;j++,count++){

    a[i][j]=count;

} 
for(i=u,j=n-u+1;i<=n-u;i++,count++){

    a[i][j]=count;

}


for(i=n-u+1,j=n-u+1;j>=u+1;j--,count++){

    a[i][j]=count;

}
for(i=n-u+1 ,j=u;i>=u+1;i--,count++){

    a[i][j]=count;

}



}

if(n%2==1){

    int y;

    y=n/2+1;

    a[y][y]=n*n;

}



for(i=1;i<=n;i++){

    for(j=1;j<=n;j++){

        printf("%4d",a[i][j]); 

    }

    printf("\n");}
    






return 0;

}

用这个试试

#include<stdio.h>
int a[20][20];
int main() {
    int n, k = 1, direct = 4; //direct:1向上  2向下  3向左  4向右
    scanf("%d", &n);
    int i = 0, j = 0;
    while(k <= n * n) {
        if(a[i][j] == 0) {
            a[i][j] = k;
            k++;
        }
        if(direct == 1) { //向上
            i--;//行减1
            if(i == -1 || a[i][j] != 0) {
                direct = 4;
                i++;
                j++;
            }
        } else if(direct == 2) { //向下
            i++;//行加1
            if(i == n || a[i][j] != 0) {
                direct = 3;
                i--;
                j--;
            }
        } else if(direct == 3) { //向左
            j--;//列减1
            if(j == -1 || a[i][j] != 0) {
                direct = 1;
                i--;
                j++;
            }
        } else if(direct == 4) { //向右
            j++;//列加1
            if(j == n || a[i][j] != 0) {
                direct = 2;
                i++;
                j--;
            }
        }
    }
    for(i = 0; i < n; i++) {
        for(j = 0; j < n; j++) {
            printf("%4d ", a[i][j]);
        }
        printf("\n");
    }
    return 0;
}