c语言数组魔方阵问题

/要求输出魔方阵。所谓魔方阵是指每一行、每一列的和对角之和均相等的方阵。
例如,五阶魔方阵为
17 24 1 8 15
23 5 7 14 16
4 6 13 20 22
10 12 19 21 3
11 18 25 2 9
程序功能要求:从键盘输入魔方阶层,只为奇数。例如输入5,则输出上图。
/
#include<stdio.h>
void main()
{
int a[50][50],x,y,m,p;
printf("请输入奇数\n");
do{
scanf("%d",&m);
} while(m<=0||m>=50);
for(x=0;x<m;x++)
for(y=0;y<m;y++)
a[x][y]=0;
x=0;
y=m/2;
a[x][y]=1;
for(p=2;p<=m*m;p++)
{
if(x-1<0)
x=x-1+m;
else x--;
if(y+1>=m)
y=y+1-m;
else y++;
if(a[x][y]!=0)
{
x=(x+2)%m;
y=(y-1)%m;
} a[x][y]=p;
}
for(x=0;x<m;x++)
{
for(y=0;y<m;y++)
printf("%4d",a[x][y]);
printf("\n");
}
}
这个程序我哪里有错误

#include<stdio.h>
#include<stdlib.h>
void main()
{
    int a[50][50],x,y,m,p;
    printf("请输入奇数\n");
    do{
        scanf("%d",&m);
    } while(m<=0||m>=50);
    for(x=0;x<m;x++)
        for(y=0;y<m;y++)
            a[x][y]=0;
    x=0;
    y=m/2;
    a[x][y]=1;
    for(p=2;p<=m*m;p++)
    {
        if(x-1<0 && y+1>=m)  //当两者同时满足时,要特殊处理,即左上角的下一个值是放在左上角的下方,这是特例
        {
            x=1;
        }
        else
        {
            if(x-1<0)
                x=x-1+m;
            else 
                x--;
            if(y+1>=m)
                y=y+1-m;
            else y++;
        }
        if(a[x][y]!=0)
        {
            x=(x+2)%m;
            y=(y-1)%m;
        } a[x][y]=p;
    }
    for(x=0;x<m;x++)
    {
        for(y=0;y<m;y++)
            printf("%4d",a[x][y]);
        printf("\n");
    }
}

你是编译有错,还是结果不对啊