/本次课任务,从文本文件中读入单词列表,然后显示在屏幕上
#include<stdio.h>
#include<stdlib.h>
#include<iostream>
#include<cstring>
using namespace std;
//子函数声明
#define INITSIZE 100
//定义结构体类型,用于表示单词类型
typedef struct word
{
char spell[100]; //定义spell成员,用于存储单词的英文拼写
char interpretation[50]; //定义interpretation成员,用于存储单词的中文意思
} word;
typedef struct SqList //定义存储单词的顺序表存储结构
{
word *list; //list数组用于存放从文件读入的单词表
int length; //顺序表的长度
int listsize; //顺序表的容量
} SqList;
void Initiate(SqList &L);
void Load(SqList &L);
void Print(SqList L);
void Test(SqList L);
int main()
{
SqList L; //定义顺序表变量L
Initiate(L); //初始化顺序表L
Load(L); //从文本文件中读取单词存入顺序表L中
Test(L);
Print(L);// 将顺序表L中的单词输出到屏幕上
return 0;
}
void Initiate(SqList &L)
//初始化顺序表L
{
L.list=(word *)malloc(INITSIZE*sizeof(word)); //为顺序表申请内存空间
if(!L.list) //如果申请空间失败,退出程序
{
cout<<"内存空间不足!"<<endl;//在屏幕上输出“内存空间不足!”
exit(0); //退出程序
}
L.length=0; //初始化单词表的长度值为0
L.listsize=INITSIZE; //初始化单词表的容量为INITSIZE值
}
void Load(SqList &L)
//从文本文件中读取单词存入顺序表L中
{
FILE *fp; //定义文件指针fp
char filename[30];
printf("请输入要测试单词的文件名:");
scanf("%s",filename);
if((fp=fopen(filename,"r"))==NULL) //打开文件,如果文件打开失败,退出程序
{
cout<<"文件不存在"<<endl; //在屏幕上输出“文件不存在!”
exit(1);
}
int i=0; //i变量用于记录从文件读入的单词个数
while(!feof(fp)&&i<L.listsize) //循环读入fp指针指向的文本文件中的每一个单词极其中文翻译
{
fgets(L.list[i].spell,100,fp); //按顺序读出文件中的单词
fgets(L.list[i].interpretation,100,fp); //按顺序读出文件中的单词翻译
i++; //单词个数增加1
}
fclose(fp); //关闭文件
L.length=i; //将顺序表中单词个数赋值给L.length
}
void Print(SqList L)
{
int i=0;
while(L.length!=i)
{
printf("%s",L.list[i].spell);
printf("%s",L.list[i].interpretation);//将顺序表L中的单词输出到屏幕上
i++;
}
}
void Test(SqList L)
{
bool flag[50];
for(int i=0;i<L.length;i++)
flag[i]=false;
int correctnum=0;
int i=0;
while(correctnum<L.length)
{
if(flag[i]==false){
char str[20];
printf("%s\n",L.list[i].interpretation); //循环输出每一个单词的中文意思,要求用户输入该单词的英文拼写
printf("请输出该单词的英文拼写:");
scanf("%s",str);
strcat(str,"\n");
if(!strcmp(L.list[i].spell,str)){
printf("答对了!你真棒\n");
correctnum++;
flag[i]=true;
//如果该单词拼写输入正确,输出“答对了!你真棒”
}
else{
printf("答错了,没关系,再接再厉!\n");
} //如果该单词拼写输入错误,输出“答错了,没关系,再接再厉!”
getchar();
}
i=(i+1)%L.length;
}
}