首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

自己写的C语言简易版排雷。但是有一个小BUG.

2013-11-15 
自己写的C语言简易版扫雷。但是有一个小BUG....自己写的C语言简易版扫雷。但是有一个小BUG,求大神帮忙修改一

自己写的C语言简易版扫雷。但是有一个小BUG....
自己写的C语言简易版扫雷。但是有一个小BUG,求大神帮忙修改一下。
代码:
#include <stdio.h>//该程序一开始自己定义雷的个数与位置,详细见一下代码注释//
int main()
{
int i,j;
char a[99][99];//采用二位数组进行赋值与雷的搜索//
int b[99][99]={0};//N,M//自己写的C语言简易版排雷。但是有一个小BUG.自己写的C语言简易版排雷。但是有一个小BUG.
int N,M;
int q=0;
int aj,ai;
scanf("%d%d",&N,&M);
while(N!=0&&M!=0)//输入0 0结束程序//
{
q++;
for(i=0;i<N;i++)
{
for(j=0;j<M;j++)
{
scanf(" %c",&a[j][i]);//'*'代表雷,'.'代表没有雷//
}
}
for(i=0;i<N;i++)
{
for(j=0;j<M;j++)
{
if(a[j][i]=='*')//'*'代表一个雷//
{
b[j][i+1]++;
b[j][i-1]++;
b[j][i]++;
b[j+1][i]++;
b[j+1][i+1]++;
b[j+1][i-1]++;
b[j-1][i]++;
b[j-1][i-1]++;
b[j-1][i+1]++;
}
}
}
printf("Field #%d:\n",q);
for(i=0;i<N;i++)
{
for(j=0;j<M;j++)
{
if(a[j][i]=='*')
{
printf("%c",a[j][i]);
continue;//采用continue函数实现雷的输出与周围雷存在的个数的输出//
}
printf("%d",b[j][i]);
}
printf("\n");
}
scanf("%d%d",&N,&M);
}
return 0;
}
详细问题见图~~为什么会出现“问题输出”中这样的问题呢?!
[解决办法]
for(i=0;i<N;i++)
{
for(j=0;j<M;j++)
{
if(a[j][i]=='*')
{
printf("%c",a[j][i]);
continue;//采用continue函数实现雷的输出与周围雷存在的个数的输出//
}
printf("%d",b[j][i]);
}
printf("\n");
}
continue使循环跳到递增循环变量的部分,也就是不判断j<M而直接j++。同学,还没学函数吗。
[解决办法]
以下代码中有数组下标越界的问题:

          b[j][i+1]++;
          b[j][i-1]++;
          b[j][i]++;
          b[j+1][i]++;
          b[j+1][i+1]++;
          b[j+1][i-1]++;
          b[j-1][i]++;
          b[j-1][i-1]++;
          b[j-1][i+1]++;
要改为:

          if ((i + 1) < N) b[j][i+1]++; //b[j][i+1]++;
          if (i > 0) b[j][i-1]++; //b[j][i-1]++;
          b[j][i]++;
          if ((j + 1) < M) b[j+1][i]++; //b[j+1][i]++;
          if ((j + 1) < M && (i + 1) < N) b[j+1][i+1]++; //b[j+1][i+1]++;
          if ((j + 1) < M && i > 0) b[j+1][i-1]++; //b[j+1][i-1]++;
          if (j > 0) b[j-1][i]++; //b[j-1][i]++;
          if (j > 0 && i > 0) b[j-1][i-1]++; b[j-1][i-1]++;
          if (j > 0 && (i + 1) < N) b[j-1][i+1]++; //b[j-1][i+1]++;

热点排行