#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;
}
妳看看對不對,能不能跑吧。如果有新的需求我可以繼續寫。代碼應該很清晰了,如果妳哪不懂可以給妳解釋。歡迎追問。