生命游戏程序运行的时候没有任何输出~
这是我写的一个生命游戏的程序,无报错,但运行的时候没有任何输出求解
=====================================================
=====================================================
#include <stdio.h>
#include <stdlib.h>
#define HS 20 // 行数
#define LS 60 // 列数
#define SHI 1 // 是
#define FOU 0 // 否
#define XB '\01' // 细胞字符
#define KB ' ' // 空白字符
#define HUO1 2 // 存活条件 1
#define HUO2 3 // 存活条件 2
int js_ljsm( const int, const int, char[][LS], const int); // 计算邻居数目
void du_cssj( char[][LS], const int); // 读入初始数据
void xs_shijie( char[][LS], const int); // 显示此时世界
void js_weilai( char[][LS], const int); // 计算未来世界
void cb_shijie( char[][LS], char[][LS], const int); // 拷贝数组
int sf_jx(void); // 是否继续
int main(void)
{
char shijie[HS][LS]; // 构造二维数组表达此世界
du_cssj (shijie, sizeof shijie / sizeof shijie[0]); // 读入初始数据
do{
xs_shijie (shijie, sizeof shijie / sizeof shijie[0]); // 显示此时世界的状态
js_weilai (shijie, sizeof shijie / sizeof shijie[0]); // 计算未来世界的状态
}
while( sf_jx() ); // 通过函数“是否继续”控制循环,1循环,0结束
system("PAUSE");
return 0;
}
/********************************
js_ljsm 函数:计算邻居数目
计算邻居数目
gzh 格子所在行 gzl 格子所在列
sj 世界 sjhs 世界行数
********************************/
int js_ljsm (const int gzh, const gzl, char sj[][LS], const int sjhs)
{
int sm = 0 ; // 邻居生命
int h,l;
for (h = gzh -1; h <= gzh +1; h++)
{
for(l = gzl -1; l <= gzl +1; l++)
{
if(h<0 || h>= sjhs) // 若邻居超过边界不考虑
continue;
if(l<0 || l>= sizeof sj[0] / sizeof sj[0][0])
continue;
if( h == gzh || l == gzl )
continue;
if( sj[h][l] == XB )
sm ++ ;
}
}
return sm;
}
/*****************************
du_cssj函数:读入初始数据
sj:世界数组 hs:行数
*****************************/
void du_cssj(char sj [][LS] , const int hs)
{
int h,l;
freopen("E:\\输入数据.txt","r",stdin);
for( h = 0; h < hs; h ++ )
{
for( l = 0; l < sizeof sj[0] / sizeof sj[0][0]; l ++ )
{
char c;
scanf("%c",&c); // 逐个读入字符
#define XBBZ '*' // 细胞标识
sj[h][l] = (c == XBBZ)? XB:KB;
#undef XBBZ
}
getchar(); // 读换行符
}
freopen("CON","r",stdin);
return ;
}
/*****************************
xs_shijie函数:显示当前世界
sj:世界数组 hs:行数
*****************************/
void xs_shijie(char sj[][LS], const int hs )
{
int h,l;
system("CLS"); // 清屏
for( h = 0; h < hs; h ++ )
{
for( l = 0; l < sizeof sj[0] / sizeof sj[0][0]; l ++ )
{
putchar( sj[h][l] ); // 逐个显示字符
}
putchar('\n');
}
putchar('\n');
putchar('\n');
return ;
}
/*****************************
js_weilai函数:显示当前世界
sj:世界数组 hs:行数
*****************************/
void js_weilai(char sj[][LS] , const int hs)
{
char dqsj[HS][LS]; // 构造一个新数组,存放当前世界的备份
cb_shijie(sj,dqsj,hs); // 复制当前世界
{
int h,l;
for( h = 0; h < hs; h ++ )
{
for( l = 0; l < sizeof sj[0] / sizeof sj[0][0]; l ++ )
{
int ljsm ; // 邻居数目
ljsm = js_ljsm( h, l, dqsj, sizeof dqsj / sizeof dqsj[0]);
switch (ljsm)
{
case HUO1: // 若邻居数为2则该格子不变
break;
case HUO2:
sj[h][l] = XB ; // 若邻居数为3则下一刻格子里必为细胞
break;
default:
sj[h][l] = KB ;
break;
}
}
}
}
return ;
}
/*****************************
cb_shijie函数:拷贝当前世界
hs:行数
*****************************/
void cb_shijie( char from[][LS], char to[][LS], const int hs)
{
int h,l;
for( h = 0; h < hs; h ++ )
{
for( l = 0; l < sizeof from[0] / sizeof from[0][0]; l ++ )
{
to[h][l] = from[h][l];
}
}
return ;
}
/*****************************
sf_jx函数:询问是否继续
是返回1,否返回0
*****************************/
int sf_jx(void)
{
printf("请问是否继续?(回车继续,其他停止)\n");
return (getchar() == '\n')? SHI:FOU ;
}