前言供检索 : 编写程序,生成一种10×10字符数组(初始时全为字符'.')
希望我最后的注释大家引以为戒
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define N 10
int main()
{
int i,j;
char a[N][N];
for (i=0;i<N;i++)
{ for(j=0;j<N;j++)
{a[i][j]='.';
printf(".");
}
printf("\n"); //打印点阵
}
printf("\n");
srand((unsigned)time(NULL)); // 生成随机数
i=0,j=0;
a[i][j]=65; //////////65 is 'A'
int remove;
for(char k =66;k<91;k++) // 66 means B 90 is z
{
once:
if ((a[i-1][j]!=46)&&(a[i+1][j]!=46)&&(a[i][j-1]!=46)&&(a[i][j+1]!=46))
break; // 判断是否四周都有活路 46为 . 的ASCII 码
remove = (rand()%10)%4; // 开始 随机 扔数字 0 上 1 下 2 坐 3 右
switch (remove)
{
case 0: if(i>0 &&a[i-1][j]==46)
{a[--i][j]=k ;
break;
}
else goto once;
case 1: if(i<9 &&a[i+1][j]==46)
{ a[++i][j]=k ;
break;
}
else goto once;
case 2: if(j>0 &&a[i][j-1]==46)
{ a[i][--j]=k ;
break;
}
else goto once;
case 3: if(j<9 &&a[i][j+1]==46)
{ a[i][++j]=k ;
break;
}
else goto once;
}
}
for (i=0;i<N;i++)
{ for(j=0;j<N;j++)
{
printf("%c", a[i][j]); // 打印最后的图
}
printf("\n");
}
return 0;
}
/* 书写规范的问题 我之前每条 case 语句 是这样写的
if(i>0 &&a[i-1][j]==46) a[--i][j]=k; break;
goto once;
导致我原先早就写对 但是一直跑不对 上网还另外看了两个小时左右
依旧没有发现有人给出正确代码 希望大家和我都要引以为戒
书写规范 别偷懒 */