C中的螺旋幻方

C中的螺旋幻方,c,matrix,spiral,magic-square,C,Matrix,Spiral,Magic Square,好的,我想做一个代码,它将打印一个魔方,它的工作原理与图片中的一样()(是一个5x5矩阵),但它是11x11。代码对我来说似乎很好,但不幸的是它不起作用,有人能帮我吗 int main(int argc, char *argv[]) { int i, j,k,l; int a[10][10] = {0} ; k=5; l=5; a[k][l]=1; for (i=1; i<11; i++) { if (i%2!=0){ for (j=0; j&l

好的,我想做一个代码,它将打印一个魔方,它的工作原理与图片中的一样()(是一个5x5矩阵),但它是11x11。代码对我来说似乎很好,但不幸的是它不起作用,有人能帮我吗

int main(int argc, char *argv[]) {
int i, j,k,l;   

int a[10][10] = {0} ;

k=5;

l=5;

a[k][l]=1;

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

    if (i%2!=0){

        for (j=0; j<i; j++) {
            a[k][l+1]=a[k][l] + 1;
            l++;    }

        for (j=0;j<i;j++) {
            a[k+1][l]= a[k][l] + 1;
            k++;    }

    }

    if (i%2==0){

        for (j=0; j<i; j++){
            a[k][l-1]= a[k][l] + 1;
            l--;    }

        for (j=0; j<i; j++){
            a[k-1][l]= a[k][l] + 1;
            k--;    }
    }

    if (i==10){

        for (j=0; j<10; j++){

            a[k][l+1]=a[k][l] + 1;
            l++;
        }
    }
}
for(i=0; i<11;i++){

    for(j=0;j<11;j++){

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

    printf("\n");
}


return 0;
}
intmain(intargc,char*argv[]){
int i,j,k,l;
int a[10][10]={0};
k=5;
l=5;
a[k][l]=1;

对于(i=1;i而言,代码并不是很清楚,但请检查声明大小

int a[10][10]={0}

声明数组时,数组中的值对应于从1开始的实际大小,而不是访问数组时从0开始的实际大小。这可能会导致分段错误(超出为程序运行保留的内存),但可能只会导致打印出随机数,因为您只会超出大约44/88字节(取决于int大小)。 相反,请按以下方式声明结构,并使用逻辑名称而不是随机标签,因为它对程序解释有很大帮助:

国际魔幻广场[11][11]

编辑:
同时检查缩进,因为缩进被一个标签关闭了

你写的内容超出了
a
的范围。
inta[10][10]
的有效索引是
0
9
。好吧,我把它改成了[11][11](愚蠢的错误),但它会这样打印(),为什么?好吧,我把它改成了[11][11](愚蠢的错误),但它是这样打印的(imgur.com/ai221Pu),这是为什么?问题是printf中的间距您可以使用printf中的宽度说明符来解决这个问题。只需在数字说明符之前添加要打印的数字量,少于该数字量的数字将用空格填充。例如:printf(“%3d”,a[i][j]);以下是printf的完整参考指南: