用C语言写一个单词本(兼具检索单词和向TXT中写入陌生单词的功能)

        最近在背考研单词,做题时总是觉得有些单词很熟悉,但是又想不起来是否背过,就用大一学的C语言写了这个代码。经过本人10天的试用,非常好用,分享给大家。

#include<stdio.h>
#include<math.h>
#include<string.h>
#include<stdlib.h>
#include<ctype.h>
#include<time.h>

int main(){
	char word [5000][20];
	char c[20];
	int time1[200];
	int keep1=0;
	int keep2=0;
	int keep3=0;
	int i;int j;int mon,day,mon1,day1;
	int read,read1;
	int ret;
	char seek[20];
	time_t timep;
    struct tm *p;
    time (&timep);
    p=gmtime(&timep);
    mon=1+p->tm_mon;day=p->tm_mday;//获取当前日期
	FILE*fp;
	fp=fopen("C:\\Users\\86152\\Desktop\\考研\\英语\\单词\\words.txt","r");
	while(fscanf(fp,"%s",c)!=EOF){
		if(c[0]<=57&&c[0]>=48){
			time1[keep2++]=keep1;
		}
		
		strcpy(word[keep1],c);
		keep1++;
		j=strlen(c);
		for (i=0;i<j;i++){
			c[i]='\0';
		}
	}
	fclose(fp);
	printf("您已记录%d个陌生词汇\n查询:\n",keep1-keep2);
while(scanf("%s",seek)!=EOF){
	for(i=0;i<keep1;i++){
		ret=strcmp(seek,word[i]);
		if(ret==0)break;
	}
	read=i;
//printf("keep1=%d\nread=%d\nkeep2=%d",keep1,read,keep2);
    if(read==keep1){
		printf("not found\n");
		
		FILE *fpWrite=fopen("C:\\Users\\86152\\Desktop\\考研\\英语\\单词\\words.txt","a");
		keep3=time1[keep2-1];
		i=0;
		mon1=word[keep3][i++]-'0';
		if(word[keep3][i]!='.'){
			mon1=mon1*10+word[keep3][i++]-'0';
		}
		i++;
		day1=word[keep3][i++]-'0';
//		printf("%d\n",word[keep3][i]);
		if(word[keep3][i]<58&&word[keep3][i]>47){
			day1=day1*10+word[keep3][i++]-'0';
		}
//		printf("%d.%d %d.%d keep3=%d\n",mon1,day1,mon,day,keep3);
		if(!(day1==day&&mon1==mon)){
			fprintf(fpWrite,"\n%d.%d\n",mon,day);
			j=0;
			if(mon>=10) word[keep1][j++]=mon/10+'0';
			word[keep1][j++]=mon%10+'0';
			word[keep1][j++]='.';
			if(day>=10)word[keep1][j++]=day/10+'0';
			word[keep1][j++]=day%10+'0';
			time1[keep2++]=keep1;
			keep1++;
		}else{
			fprintf(fpWrite," ");
		}
		fprintf(fpWrite,"%s",seek);
		strcpy(word[keep1++],seek);
		fclose(fpWrite);
		continue;
	}
	for(i=0;i<keep2;i++){
		if(time1[i]>read)break;
	}
	read1=time1[i-1];read=read-read1;
	printf("%s 第%d个\n",&word[read1],read);
	j=strlen(seek);
	for (i=0;i<j;i++){
			seek[i]='\0';
		}
}
	return 0;
}

 首先我们需要新建一个txt,作为我们的单词本,然后按照下面的格式记录我们每天所学的单词

 当然你也可以直接新建一个空白的txt,从零开始记录单词。

        运行当前代码,当检索到熟悉单词,会显示记录的时间和位置;当遇到陌生单词会将单词按照规定格式写入文本,代码附带了日期获取功能,所以如果当日是第一次记录单词,会自动写入日期。(注意,如果你要用这个代码,记得将代码中的路径改成你自己的,另外这个代码虽然经过了几天的试用仍然可能会有bug,如果遇到了请告诉我)。

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值