在学C语言
2021-10-16 09:25
采纳率: 85.7%
浏览 43

数组编译错误?帮帮我

Main.c: In function ‘main’:
Main.c:15:5: error: variable-sized object may not be initialized
int a[t][t]= {0};
^~~
Main.c:15:19: warning: excess elements in array initializer
int a[t][t]= {0};
^
Main.c:15:19: note: (near initialization for ‘a[0]’)
Main.c:15:5: warning: excess elements in array initializer
int a[t][t]= {0};
^~~
Main.c:15:5: note: (near initialization for ‘a’)


#include<stdio.h>
#include<math.h>
int main()
{
int n,x,y,oldx=0,oldy,s,t;
scanf("%d",&n);
t=sqrt(n);
int a[t][t]= {0};
oldy=(t-1)/2;
a[oldx][oldy]=1;
for(s=2; s<=n; s++)
{ x=oldx-1;
y=oldy+1;
if(x<0) x=t-1;
if(y>=t) y=0;
if(a[x][y]!=0) x=oldx+1,y=oldy;
a[x][y]=s;
oldx=x;
oldy=y;
}
for(int i=0; i<t; i++)
{ for(int j=0; j<t; j++)
printf("%d\t",a[i][j]);
printf("\n");
}
return 0;
}

  • 好问题 提建议
  • 收藏

3条回答 默认 最新

  • qq_708907433 2021-10-16 10:16
    已采纳
    
    #include    <stdio.h>
    #include    <math.h>
    #include    <stdlib.h>
    #include    <string.h>
    int main()
    {
        int n,x,y,oldx=0,oldy,s,t;
        int **a;
        int i;
        scanf("%d",&n);
        t=sqrt(n);
        //下面的内存申请用的是 n 不是 t 
        a=( int **) malloc( sizeof(int*) * n );
        for(i=0;i<n;i++)    
        {
            a[i]=( int *) malloc( sizeof(int) * n );
            memset(a[i],0,sizeof(int) * n);
        }
    
        oldy=(t-1)/2;
        a[oldx][oldy]=1;
        for(s=2; s<=n; s++)
        {
            x=oldx-1;
            y=oldy+1;
            if(x<0) x=t-1;
            if(y>=t) y=0;
            if(a[x][y]!=0) x=oldx+1,y=oldy;
            a[x][y]=s;
            oldx=x;
            oldy=y;
        }
        for(int i=0; i<t; i++)
        {
            for(int j=0; j<t; j++) printf("%d\t",a[i][j]);
            printf("\n");
        }
    
        for(i=0;i<n;i++)
        {
            free(a[i]);
        }
        free(*a);
    
        return 0;
    }
    
    
    已采纳该答案
    评论
    解决 无用
    打赏 举报
  • qq_708907433 2021-10-16 09:27

    把代码贴出来看看呀

    评论
    解决 无用
    打赏 举报
  • qq_708907433 2021-10-16 09:40

    int a[t][t]= {0};
    t 不能是变量
    比如可以用一个较大的数先声明
    int a[100][100]= {0};
    后面再用,但是要保证不要越界

    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题