大家帮忙看下这个程序代码咋回事
数字魔方
#include <stdio.h>
int main ()
{
int a[11][11],i,j,M,X,Y;
printf("M=");
scanf("%d",&M);
if (M%2==0)
printf("error\n");
else
{
a[M/2+1][0]=1;
for(i=1;i<=M*M;i++)
{
if(Y==-1)
Y=M-1;
if(X==M)
X=0;
a[X][Y]=i;
if(i%M==0)
X++;
else
{
X--;
Y++;
}
}
for(i=1;i<M;i++)
{for(j=1;j<M;j++)
printf("|\n");
printf("%d",a[i][j]);
printf("\n");
}
}
return 0;
}
[解决办法]
问问题:
首先把你代码的目的说下,
然后把你思路说下,
再把你错误的地方说出来。
[解决办法]
The variable 'Y' is being used without being initialized.
你这个你没初始化 你又没扶植
直接和-1去比啊
scanf("%d",&M);
if (M%2==0)
printf("error\n");
else
{
a[M/2+1][0]=1;
}
还有你这个M不限定多少啊 你就敢 a[M/2+1][0]=1;
这个M要是超级大 不一下就死了
[解决办法]
while(M > MAX_SIZE *2){
scanf("%d",&M);
}
if (M%2==0)
printf("error\n");
else
{
a[M/2+1][0]=1;
}
第二种直接保护起来 防止数组越界
#include<assert.h>
assert(0 <= idx && idx < sizeof(a) /sizeof(a[0]));
a[idx] 就是安全的
[解决办法]
我只想说,你的源程序中 X 和 Y 的值确定了,你没确定并且都不知道 X 和 Y 的值是什么,你还拿两个数来相等,我把改过你的源代码给你看看,结果都出来了: