一、目标:
成语接龙小游戏,玩家输入一个成语,程序(电脑)输出一个。按成语接龙规则(最后一个字与接下来第一个字相同)
二、算法流程图:
三、实现代码:
#include<stdio.h>
#include<string.h>
#define M 13361
FILE *fp;
int main()
{
char cy[M][10];
char a[8];
//char b[2];
char c[2];
int i,j;
int find;
int flag=0;
if((fp=fopen("idom.txt","r"))==NULL)
{
printf("cannot open file\n");
return 0;
}
for(i=0;i<M;i++)
{
fscanf(fp,"%s",cy[i]);
}
while(1)
{
printf("请输入开头的成语:(若输入“退出”,则退出游戏)\n");
scanf("%s",&a);
find=0;
if(strcmp(a,"退出")==0)
break;
for(i=0;i<M;i++)
{
if(strncmp(a,cy[i],strlen(a))==0)
{
find=1;
break;
}
}
if(find==0)
printf("输入的不是成语,请重新输入或退出\n");
else
{
//b[0]=a[6];
// b[1]=a[7];
for(i=0;i<M;i++)
{
if(cy[i][0]==a[6]&&cy[i][1]==a[7])
{
flag=1;
printf("%s\n",cy[i]);
//c[0]=cy[i][6];
//c[1]=cy[i][7];
break;}
if(flag==0&&i==(M-1))
{
printf("你赢了!真棒!\n");
break;}
// continue;
}
}
}
return 0;
}
四、部分代码解释:
(1)
if((fp=fopen("idom.txt","r"))==NULL)
将成语库命名为idom.txt,并且将文件和c语言程序放在同一个文件夹下。Fopen函数文件打开函数用法:fopen(文件名,打开方式)fp=fopen==null表示了将成语库全部放进指针。
(2)
if(strncmp(a,cy[i],strlen(a))==0)
用法int strncmp ( const char * str1, const char * str2, size_t n );比较两个数组==0则说明a在数组cy中。
(3)
if(cy[i][0]==a[6]&&cy[i][1]==a[7])
输入数组和成语库的比较,首尾相等则继续运行。
(4)
if(flag==0&&i==(M-1))
循环完M次若没有符合条件的则继续运行。
五、运行结果
若不将成语库和c程序放在同一个文件夹下,则会出现这样的报错信息。
输入一个开头成语之后程序运行效果如图
若没有词语可接,输入退出后会呈现这样的效果。
若是你的词语让程序的库没法接下去,就会出现这样的提示。