C语言关键字中英翻译机(用文件实现),有进阶(扩展了一个小游戏超有趣)

2023-12-30 05:36:26

文章目录

概要

用c语言完成关键字中英翻译机。功能要求:要求输入中文的名词和关键字,可以将其翻译成英语,如输入“基本整形”+回车,得到 int;输入英文的单词 int,则可以翻译成中文“基本整形”。可模拟文曲星来实现。可多次查询,输入 bye 时退出。

整体架构流程

用文件实现各函数功能menu1菜单search字典 game小游戏

利用文件操作来完成,可以多次查找,将各函数放在主函数中实现。

功能输入中文的名词和关键字,可以将其翻译成英语,扩展了一个关于关键字的小游戏。

利用while()来实现多组输入输出。

游戏里面一个for循环完成给用户三次机会。

函数功能解释

1 . void menu()?菜

2?. void search(char str[], int k);字典

3. ?void menu1();菜单

4. ?void game();小游戏

代码实现

注意由于使用文件实现故大家要把下面的数据拷到记事本里并重命名为"kkxixi.dat"

注意空格不能省略。

文件中要保存的数据(把下面这些数据拷到源程序对应的文件夹里的记事本里(如果没有记事本可自己创一个)一定记得把记事本重命名为"kkxixi.dat"


int 基本整型 char 字符型 float 浮点型 double 双精度浮点型 enum 枚举类型 long 长整型 short 短整型 struct 结构体类型 union 共用体类型 signed 有符号类型 longlong 长整型类型


思路:创建一个数组将文件中的数组保存下来后,遍历整个数组,找出答案并输出。扩展一个小游戏,也是用数组,不过这个数组只存放各各类型字节大小,和文件中的一一对应,判断输出即可。

采用while可多组输入输出。

菜单函数

void menu()
{
	printf("-----------------------------\n");
	printf("---<C语言关键字中英翻译机>---\n");
	printf("-----<输入bye退出程序>-------\n");
	printf("-----<输入play进入练习>------\n");
	printf("\n");
}

?字典函数

void search(char str[], int k)
{
	A s;
	FILE* fp;
	if ((fp = fopen("kkxixi.dat", "r")) == NULL)
	{
		printf("cannot open file\n");
		exit(0);
	}
	A string[100];
	int i = 0;
	while (!feof(fp))
	{
		fscanf(fp, "%s %s", string[i].en, string[i].ch);
		i++;
	}
	fclose(fp);
	for (int t = 0; t <= i - 1; t++)//英变汉
	{
		if (strcmp(string[t].en, str) == 0)
		{
			printf("%s\n", string[t].ch);
			return;
		}
	}
	for (int t = 0; t <= i - 1; t++)//汉变英
	{
		if (strcmp(string[t].ch, str) == 0)
		{
			printf("%s\n", string[t].en);
			return;
		}
	}
	printf("找不到\n");
}

一个小菜单

void menu1()
{
	printf("请输入查找信息-->:");
}

进阶小游戏

void game()
{
	printf("\n");
	printf("-------练习---------\n");
	int t = 0;
	do
	{
		A s;
		FILE* fp;
		if ((fp = fopen("kkxixi.dat", "r")) == NULL)//打开文件
		{
			printf("cannot open file\n");
			exit(0);
		}
		A string[100];//用来存储文件信息
		int i = 0;
		while (!feof(fp))
		{
			fscanf(fp, "%s %s", string[i].en, string[i].ch);//读取文件信息并保存到string中
			i++;
		}
		fclose(fp);//关闭文件
		srand(time(NULL));//用rand生成随机数的前摇
		int k = rand() % 11;//生成随机数模上11是为了生成0~10直接的数字
		printf("%s", string[k].en);
		printf("请输入相对应的中文-->:");
		char str[100];
		scanf("%s", str);
		int x = 3;
		int a[40] = { 4,1,4,8,0,4,2,0,0,0,8 };
		if (strcmp(string[k].ch, str) == 0)
		{
			printf("恭喜你答对啦!\n");
			printf("如果它是基本数据类型,你能输出它的字节吗(有的填数字,没有就写0)?->:");
			int temp;
			for (x=3;x>=1; x--)
			{
				scanf("%d", &temp);
				if (a[k] == temp)
				{
					printf("你真厉害!恭喜你完成挑战!\n");
					break;
					//printf("游戏结束\n");
				}
				else
				{
					if (x - 1 == 0)
					{
						printf("很遗憾回答错误,再去复习复习吧\n");
						break;
					}
					printf("回答错误你还有%d次机会\n",x-1);
				}
			}
		}
		else printf("很遗憾答错了,快去刷几题力扣再来\n");
		printf("输入非0继续练习--输入0退出游戏\n");
		scanf("%d", &t);
	} while (t);
}

主函数

int main()
{
	menu();
	int num = 1;
	while (num)
	{
		menu1();
		char str[100];
		scanf("%s", str);
		if (strcmp(str, "bye") == 0)
		{
			printf("退出程序");
			return 0;
		}
		if (strcmp(str, "play") == 0) game();
		else search(str, num);
	}
	return 0;
}

总代码

#define  _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
//课堂实验设计
///
typedef struct stk
{
	char en[100];
	char ch[100];
}A;
void menu()
{
	printf("-----------------------------\n");
	printf("---<C语言关键字中英翻译机>---\n");
	printf("-----<输入bye退出程序>-------\n");
	printf("-----<输入play进入练习>------\n");
	printf("\n");
}
void search(char str[], int k)
{
	A s;
	FILE* fp;
	if ((fp = fopen("kkxixi.dat", "r")) == NULL)
	{
		printf("cannot open file\n");
		exit(0);
	}
	A string[100];
	int i = 0;
	while (!feof(fp))
	{
		fscanf(fp, "%s %s", string[i].en, string[i].ch);
		i++;
	}
	fclose(fp);
	for (int t = 0; t <= i - 1; t++)//英变汉
	{
		if (strcmp(string[t].en, str) == 0)
		{
			printf("%s\n", string[t].ch);
			return;
		}
	}
	for (int t = 0; t <= i - 1; t++)//汉变英
	{
		if (strcmp(string[t].ch, str) == 0)
		{
			printf("%s\n", string[t].en);
			return;
		}
	}
	printf("找不到\n");
}
void menu1()
{
	printf("请输入查找信息-->:");
}
void game()
{
	printf("\n");
	printf("-------练习---------\n");
	int t = 0;
	do
	{
		A s;
		FILE* fp;
		if ((fp = fopen("kkxixi.dat", "r")) == NULL)//打开文件
		{
			printf("cannot open file\n");
			exit(0);
		}
		A string[100];//用来存储文件信息
		int i = 0;
		while (!feof(fp))
		{
			fscanf(fp, "%s %s", string[i].en, string[i].ch);//读取文件信息并保存到string中
			i++;
		}
		fclose(fp);//关闭文件
		srand(time(NULL));//用rand生成随机数的前摇
		int k = rand() % 11;//生成随机数模上11是为了生成0~10直接的数字
		printf("%s", string[k].en);
		printf("请输入相对应的中文-->:");
		char str[100];
		scanf("%s", str);
		int x = 3;
		int a[40] = { 4,1,4,8,0,4,2,0,0,0,8 };
		if (strcmp(string[k].ch, str) == 0)
		{
			printf("恭喜你答对啦!\n");
			printf("如果它是基本数据类型,你能输出它的字节吗(有的填数字,没有就写0)?->:");
			int temp;
			for (x=3;x>=1; x--)
			{
				scanf("%d", &temp);
				if (a[k] == temp)
				{
					printf("你真厉害!恭喜你完成挑战!\n");
					break;
					//printf("游戏结束\n");
				}
				else
				{
					if (x - 1 == 0)
					{
						printf("很遗憾回答错误,再去复习复习吧\n");
						break;
					}
					printf("回答错误你还有%d次机会\n",x-1);
				}
			}
		}
		else printf("很遗憾答错了,快去刷几题力扣再来\n");
		printf("输入非0继续练习--输入0退出游戏\n");
		scanf("%d", &t);
	} while (t);
}
int main()
{
	menu();
	int num = 1;
	while (num)
	{
		menu1();
		char str[100];
		scanf("%s", str);
		if (strcmp(str, "bye") == 0)
		{
			printf("退出程序");
			return 0;
		}
		if (strcmp(str, "play") == 0) game();
		else search(str, num);
	}
	return 0;
}

小结

将文件读取的数据存放在数组中,由于本题的特性,要自己定义一个类型,遍历整个数组,需要读者对文件操作有一定的了解,不难。

如果此文章对你有用的话麻烦点个赞,阿里嘎多。

文章来源:https://blog.csdn.net/2301_80035594/article/details/135225971
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。