文件IO实现简单的词典
有兴趣的可以跟着实现一下
单词表文件
链接:https://pan.baidu.com/s/1xDGpKHLL1QQ6v__vFNmnGg
提取码:wcmr
1.思路
词典:
sharpen v.削尖,磨快
sharpener n.铅笔刀,磨石
sharply adv.尖锐地,敏锐地
shatter v.粉碎,毁坏
shave v.剃,修脸
she pron.她
shear v.剪毛,切割
shed v.流下 n.棚子
sheep n.绵羊
输入单词跟词典比较,相同输出其释义.根据单词空格,分开查询单词,当输入单词跟词典中单词相同,输出词典中一行数据。
2.打开文件
fopen是ANSIC标准中的C语言库函数,在不同的系统中应该调不同的内核api,返回的是一个指向文件结构的指针。
FILE* open fopen("dict.txt","w");
FILE *fopen(const char *pathname, const char *mode);
参数1:
文件路径
参数2:
打开文件权限
3.读取文件
fgets从指定流stream读取一个字符串存储到s指向的内存空间
char *fgets(char *s, int size, FILE *stream);
参数:
char *s:
是一个指向char类型的指针,即s可以是一个字符指针变量名,也可以是一个字符数组名;
int size:
是读取的最大字符数(包括最后的空字符’\0’),类型为int型;把size设置为s指向内存空间的字节数,可防止内存访问越界;
FILE *stream:
是一个指向FILE类型结构的指针;stream指定了fgets()函数要读取的流,可以是文件流,也可以是标准输入流;当是文件流时,stream等于fopen()函数的返回值;当是标准输入流时,stream等于stdin。
4.源码
#include <stdio.h>
int toChinese(){
//1.打开单词文件
FILE*open=fopen("dict.txt","r");
if(open==0){
perror("open");
return-1;
}
//2.根据输入的单词对比词典单词
//输入单词
char word[20];
//词典单词
char dict[1024];
printf("请输入要查询的单词\n");
scanf("%s",word);
char *p,*q;
//从open中读取数据,每次读一行
while(fgets(dict,sizeof(dict),open)!=NULL){
//使用指针比较两个字符串数组的值
p=word;
q=dict;
//当单词表当前行不为空就一直比较
while(*q !=' '){
//拿单词表跟输入单词比较
if(*q != *p)
//printf("==");
break;
//指针往后移继续比较
q++;
p++;
}
//判断word是否读完,每行单词是否读完
if(*q==' ' && *p=='\0'){
printf("结果为:%s",dict);
return 0;
}
}
printf("查无此单词\n");
}
void openDict(){
flag_1:
printf("=========新华词典================\n");
printf("欢迎使用盗版词典\n");
printf("按键指南:\n");
printf("输入(1)英译汉\n");
printf("输入(2)退出词典\n");
int ch;
scanf("%d",&ch);
//去掉回车
while(getchar()!='\n');
switch (ch){
case 1:
toChinese();
break;
case 2:
break;
default:
printf("暂不支持别的语种\n");
goto flag_1;
}
}
int main(int argc, char *argv[])
{
openDict();
return 0;
}
5.效果
=========新华词典================
欢迎使用盗版词典
按键指南:
输入(1)英译汉
输入(2)退出词典
1
请输入要查询的单词
apple
结果为:apple n.苹果
6.TIPS
注意使用fgets函数会读取一行数据,也会读取换行,所以当我们打印词典数据时不需要换行