0


[小小项目]背单词的程序---1.0_纯C语言_单文件版本

文章目录


前言:可以学到什么?

  1. 加强基础语法的掌握
  2. 关于C语言的文件读写的操作(重点)

一、功能介绍以及演示

  • 输入文本,可以判断是否正确,正确的话下一个,不正确的话提示,知道正确为止。
  • 单词不会的话可以输入next进行下一个
  • 退出的话输入end在这里插入图片描述

二、准备工作

1)准备所需的单词的文本

注:以下单词来源于百度,开源,可用于学习

  • 对应的中文和英文,每行的中文英文严格的一一对应,保存在 txt 文本中,程序的实现以及对文件的读写主要靠这两个文件在这里插入图片描述
  • 英文如下,每个单词占一行在这里插入图片描述
  • 中文如下,单词有多个词性,但是每个中文只占一行在这里插入图片描述

2)任意的C语言开发环境

  • 需要注意的是:把上述的文本文件添加至工程

三、代码

1)读取文件,不存在则爆出异常

FILE* pf_en =fopen("./data/en.txt","r");
FILE* pf_ch =fopen("./data/ch.txt","r");
FILE* pf_mem =fopen("./data/info.txt","r");if(pf_en ==NULL|| pf_ch ==NULL|| pf_mem ==NULL){printf("必要文件丢失或被修改!\n");getchar();return-1;}

2)开辟空间来存放读取出来的内容

// 记录当前定位的位置信息,方便下次打开的时候直接读取// 相当于是保存记录unsignedlonglong seck_en =0;unsignedlonglong seck_ch =0;// 各自缓冲区char* en_buffer =(char*)calloc(50,1);char* ch_buffer =(char*)calloc(300,1);char* usr_buffer =(char*)calloc(50,1);

3)完成函数–从文件中读取英文,写入到en_buffer

voidgetEnglish(char* en_buffer, FILE* pf_en,longlong* seck_en){char ch =0;for(int i =0;(ch =fgetc(pf_en))!='\n'; i++){
        en_buffer[i]= ch;// 每读取到一个字节,偏移量就加一*seck_en +=1;}// 把单词转换成纯小写
    en_buffer =strlwr(en_buffer);// 结束时便宜两个字节,跳过回车和换行*seck_en +=2;}

4)完成函数–从文件中读取中文,写入到ch_buffer

voidgetChinese(char* ch_buffer, FILE* pf_ch,longlong* seck_ch){char ch =0;for(int i =0;(ch =fgetc(pf_ch))!='\n'; i++){// 不是首元素  且当前读取到的是字母  且前一个元素不是字母if(i >0&&isword(ch)&&!isword(ch_buffer[i -1])){// 在缓冲区内添加一个换行
            ch_buffer[i++]='\n';}
        ch_buffer[i]= ch;// 每读取到一个字节,偏移量就加一*seck_ch +=1;}// 结束时偏移两个字节,跳过回车和换行*seck_ch +=2;}

5)利用死循环完成输入以及判断的逻辑

while(1){// 往缓冲区里放入当前的单词和中文意思getEnglish(en_buffer, pf_en,&seck_en);getChinese(ch_buffer, pf_ch,&seck_ch);// printf("%s\n", en_buffer);//输出中文的示意printf("当前单词中文意思如下, 不会请输入next, 退出请输入end\n");printf("%s\n", ch_buffer);printf("输入英文:>");while(1){// 用户输入for(int i =0;(ch =getchar())!='\n'; i++){
            usr_buffer[i]= ch;}// 输入next跳过,进行下一个if(strcmp(usr_buffer,"next")==0){printf("这个单词是:%s\n", en_buffer);printf("3秒后清屏\n");Sleep(3000);system("cls");break;}elseif(strcmp(usr_buffer, en_buffer)==0){// 输入正确printf("恭喜输入正确!\n");printf("2秒后清屏\n");Sleep(2000);system("cls");break;}elseif(strcmp(usr_buffer,"end")==0){printf("2秒后退出!\n");Sleep(2000);goto end;}else{// 清空用户的输入printf("不是哦,重新输入:>");memset(usr_buffer,0,50);continue;}}// 清空当前的缓冲区memset(en_buffer,0,50);memset(ch_buffer,0,300);memset(usr_buffer,0,50);}

四、代码细节

1)文件每行的末尾含有\r和\n两个字符

  • 所以我们需要将seek往后偏移2,才可以读取下一个单词

2)getChinese函数中的if判断

if(i >0&&isword(ch)&&!isword(ch_buffer[i -1]))
  • 英文的示意是有不同的词性的,于是我们可以判断一行中文中出现的非第一次英文单词作为分割,在输出中添加换行

总结

以上就是所分享的内容,本程序仅简单实现了对单词的读写以及只有用户输入功能,接下来会给大家带来C语言分文件的版本

附:源码地址

源码地址,内含源码

标签: c语言

本文转载自: https://blog.csdn.net/Rserendipity/article/details/127434661
版权归原作者 Rserendipity 所有, 如有侵权,请联系我们删除。

“[小小项目]背单词的程序---1.0_纯C语言_单文件版本”的评论:

还没有评论