我遇到了一个问题,不知道为什么会出现“正在从“a”中读取无效数据“和”写入“a”时缓冲区溢出”,是在这里出现的
if (a[i][j] == 0)
a[i][j] = k;
下面是源码
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int a[15][15] = { 0 };
int i, j, n, k, n1;
i = 1;
printf("Please input any positive integer:\n");
scanf_s("%d", &n1);
n = n1 % 6 * 2 + 1;
j = n / 2 + 1;
a[i][j] = 1;
for (k = 2; k <= n * n; k++)
{
i = i - 1;
j = j + 1;
if (i <= 0 && j <= n)
i = n;
if (i <= 0 && j > n)
{
i = i + 2;
j = j - 1;
}
if (j > n)
{
j = 1;
}
if (i >= 15 || j >= 15)
{
printf("!!!!!!!");
exit(1);
}
else
{
if (a[i][j] == 0)
a[i][j] = k;
else
{
i = i + 2;
j = j - 1;
a[i][j] = k;
}
}
}
for (i = 1; i <= n; i++)
{
for (j = 0; j <= n; j++)
printf("%10d", a[i][j]);
printf("\n");
}
return 0;
}
我的目的是1到13阶任意奇数阶幻方问题解决,我是在VS2022调试的。这个程序能是能得出结果。我本来以为是下标越界了,但是我添加了
if (i >= 15 || j >= 15)
发现并不是,所以我就感到很困惑,请问为什么会出现这种提示呢?