文章目录
-
- 概要
- 整体架构流程
- 函数功能解释
- 小结
概要
用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;
}
小结
将文件读取的数据存放在数组中,由于本题的特性,要自己定义一个类型,遍历整个数组,需要读者对文件操作有一定的了解,不难。
如果此文章对你有用的话麻烦点个赞,阿里嘎多。