#include<stdio.h>
#include<string.h>
#include<malloc.h>
#include<math.h>
#define min(A,B) (A<B?A:B)
#define max(A,B) (A<B?B:A)
typedef struct Dict
{
char en[30];
char zh[30];
struct Dict* next;
} Dict;
int main(void)
{
Dict* head = 0;
int stucount=0;//数量
while(1)
{
printf("输入操作号:1:词汇输入 2:浏览 3:汉英 4:英汉 5:删除 6:退出:");
int quest;
scanf("%d",&quest);
scanf("%*[^\n]");
if(quest==6)break;
else if(quest==1)
{
Dict* newDict = (Dict*)malloc(sizeof(Dict));
printf("请输入中文:");
scanf("%29s", newDict->zh);
scanf("%*[^\n]");
printf("请输入英文:");
scanf("%29s", newDict->en);
scanf("%*[^\n]");
//插入链表首,这样最新添加的显示在最上面,容易看见效果
newDict->next=head;
head=newDict;
++stucount;
}
else if(quest==2)
{
if(head==0)
printf("没有单词!\n");
else
{
printf("开始浏览单词:\n");
while(1)
int st=0,en=min(st+10,stucount);
{
printf("浏览:%d个到%d个单词\n",st+1,en);
Dict* stu = head;
for(int i=0; i<st; ++i)
{
stu=stu->next;
}
for(int i=st; i<en; ++i)
{
printf("中文:%s 英文:%s\n",stu->en,stu->zh);
stu=stu->next;
}
printf("输入操作号:1 向后翻页;2 向前翻页;-1 退出:");
int squest;
scanf("%d",&squest);
scanf("%*[^\n]");
if(squest==1)
{
if(en!=stucount) st=en;
}
else if(squest==2)
{
st=max(0,st-10);
}
else if(squest==-1)break;
en=min(st+10,stucount);
}
}
}
else if(quest==3 || quest==4 || quest==5)
{
char a[30];
if(quest==3)printf("请输入汉语词汇:");
else if(quest==4) printf("请输入英语词汇:");
else if(quest==5) printf("请输入待删除的词汇(汉英均可):");
scanf("%29s", a);
scanf("%*[^\n]");
Dict* stu = head;
Dict* lststu = 0;
int flag=0;
while(stu!=0 && flag==0)
{
if(quest==3)
{
if(strcmp(a,stu->zh)==0)
{
printf("英语为:%s\n",stu->en);
flag=1;
}
}
else if(quest==4)
{
if(strcmp(a,stu->en)==0)
{
printf("汉语为:%s\n",stu->zh);
flag=1;
}
}
else if(quest==5)
{
if(strcmp(a,stu->en)==0 || strcmp(a,stu->zh)==0)
{
stucount--;
if(lststu!=0)
lststu -> next = stu -> next;
else
head = stu -> next;
printf("已删除!\n");
flag=1;
}
}
lststu=stu;
stu=stu->next;
}
if(flag==0)
{
printf("没有查到词汇!\n");
}
}
}
return 0;
}
你看看对不对,能不能跑吧。如果有新的需求我可以继续写。代码应该很清晰了,如果你哪不懂可以给你解释。欢迎追问。