c语言:简单英文词典排版系统,能解释一下原理和修改一下吗?

c语言:简单英文词典排版系统,代码可以运行但有错误
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<ctype.h>
#define ROWS 258
#define COLS 32
#define N 1000
static FILE *fp;
static char a[ROWS][COLS];
char get_optioin(viod);
int b(int count);
void c(char pt[],int count);
int check(char arr[],int count);
void storage(char pt[],int count);
int n;
char word[N][20];
void menu()
{
int n,w;
do
{
puts("\t
MENU
\n");
puts("\t1.Add new word");
puts("\t2.Browse all the words");
puts("\t3.Search the word");
puts("\t4.Sort the words");
puts("\t5.Order by A-Z");
puts("\t6.Exit");
puts("*\n");
printf("Choice your number(1-6):[ ]\b\b");
scanf("%d",&n);
if(n<1||n>6)
{
w=1;
getchar();
}
else w=0;
}while(w==1);
switch(n)
{
case 1:add();break;
case 2:browse();break;
case 3:search();break;
case 4:sort();break;
case 5:order();break;
case 6:exit(0);
}
}
void main(){
menu();
}
int load()
{
int i,count;
int start;
char *pt[ROWS];
char ch,len;
char input;
if((fp=fopen("words.txt","a+"))==NULL)
{
printf("\ncannot open file!\n");
return NULL;
}
for(i=0;!feof(fp);i++)
fscanf(fp,"%s",&word[i]);
fclose(fp);
return i+1;
}
void save(int n)
{
FILE *fp;
int i;
if((fp=fopen("words.txt","a+"))==NULL)
{
printf("\ncannot open file!\n");
exit(0);
}
for(i=0;i<n;i++)
fprintf(fp,"%s",&word[i]);
fclose(fp);
}
void sort()
{
int i,j,k;
char c[20];
if((n=load())==0)
{
printf("\n cannot open file!\n");
exit(0);
}
for(i=0;i<n;i++)
for(j=0;j<n-i-1;j++);
if(strcmp(word[j],word[j+1])>0)
{
strcmp(c,word[j]);
strcmp(word[j],word[j+1]);
strcmp(word[j+1],c);
}
save(n);
printf("successful!\n");
printf("\nNow? 1.browse all 2.back");
scanf("%d",&k);
if(k==1)
browse();
else if(k==2)
menu();
}
void order()
{
int a[N],i,j,t;
struct words;
n=load();
for(i=0;i<N;i++)
for(i=0;i<N-1;i++)
for(j=i+i;j<N;j++)
if(a[i]>a[j])
{
t=a[i];
a[i]=a[j];
a[j]=t;
}
for(j=0;j<N;j++)
printf("%3d",a[i]);
}
void modify(int a)
{
char c[20];
printf("Enter the new word:");
scanf("%s",c);
strcpy(word[a],c);
save(n);
}
void del(int a)
{
int x,i,y;
printf("are you sure to delate this word?\n\t1.sure 2.no and back menu []\b\b");
scanf("%d",&x);
if(x==1)
{
for(i=0;i<n-1;i++)
strcpy(word[i],word[i+1]);
save(n-1);
printf("successful! now? 1.one more 2.back menu");
scanf("%d",&y);
if(y==1)
search();
else if(y==2)
menu();
}
else if(x==2)
{
menu();
}
}
void add()
{
int i,x,u,v,w;
char c[20];
if((n=load())==0)
exit(0);
else
{
puts("Enter the new word!\n");
scanf("%s",c);
for(i=0;i<n;i++)
{
if(strcmp(word[i],c)==0)
break;
}
if(i<n)
{
w=1;
do
{
printf("the word has already exit!\n");
printf("\n\nwhat do you want to do?\n\t1.enter one more 2.back menu []\b\b");
scanf("%d",&x);
if(x<1||x>2)
u=1;
else
u=0;
}while(u==1);
}
else
{
v=1;
strcpy(word[i],c);
save(n+1);
printf("successful! now choice what you will do next?\n\t1.add another 2.back menu [ ]\b\b");
do
{
scanf("%d",&x);
if(x<1||x>2)
v=1;
else
v=0;
}while(v==1);
}
switch(x)
{
case 1:add();break;
case 2:menu();break;
}
}
}
void browse()
{
int i,w;
if((n=load())==0)
{
printf("\n cannot open file\n");
exit(0);
}
for(i=0;i<n-1;i++)
printf("%s/n",word[i]);
puts("successful! now 1.back menu 2.sort");
scanf("%d",&w);
if(w==1)
menu();
else if(w==2)
sort();
}
void search()
{
int i,x,y;
char vs[20];
if((n=load())==0)
{
printf("\n cannot open file\n");
exit(0);
}
printf("Enter the word what you want to search:\n");
scanf("%s",vs);
for(i=0;i<n;i++)
if(strcmp(word[i],vs)==0)
{
printf("successful!\n the word is %s\n",word[i]);
printf("what would you like to do with the word?\n\t 1.modify 2.delrte 3.nothing []\b\b");
scanf("%d",&y);
if(y==1)
modify(i);
else{del(i);}
}
if(i==n)
printf("hoho!sorry.not found~");
printf("now.1.one more 2.back 3exit");
scanf("%d",&x);
switch(x)
{
case 1:search();break;
case 2:menu();break;
case 3:exit(0);
}
}

可以运行但结果错误

有能解释一下原理和帮忙修改一下吗?谢谢。

思路:
char word[N][20];保存所有的单词,在这个二维数组中进行插入、删除、遍历操作实现单词的插入、删除和查询显示。
错误:
这个代码根本跑步起来啊。
(1)
char get_optioin(viod);
int b(int count);
void c(char pt[],int count);
int check(char arr[],int count);
void storage(char pt[],int count);
这些函数你声明了没实现,反而在menu()函数中调用的函数都没有声明。
(2)load()函数中,fscanf(fp,"%s",&word[i]);这里,不需要&符号。而且你的函数中,不需要每次都去调用load,在main函数中调用一次就可以了。
(3)其它错误不一一说了,order函数没看明白要干啥,代码修改如下:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<ctype.h>
#define ROWS 258
#define COLS 32
#define N 1000
static FILE *fp;
//static char a[ROWS][COLS];
int load();
void add();
void browse();
void search();
void sort();
void order();
//char get_optioin();
//int b(int count);
//void c(char pt[],int count);
//int check(char arr[],int count);
//void storage(char pt[],int count);
int n=0;
char word[N][20];
void menu()
{
    int n,w;
    do
    {
        puts("\tMENU\n");
        puts("\t1.Add new word");
        puts("\t2.Browse all the words");
        puts("\t3.Search the word");
        puts("\t4.Sort the words");
        puts("\t5.Order by A-Z");
        puts("\t6.Exit");
        puts("*\n");
        printf("Choice your number(1-6):[ ]\b\b");
        scanf("%d",&n);
        if(n<1||n>6)
        {
            w=1;
            //getchar(); //这一句没用
        }
        else w=0;
    }while(w==1);
    switch(n)
    {
    case 1:add();break;
    case 2:browse();break;
    case 3:search();break;
    case 4:sort();break;
    case 5:order();break;
    case 6:exit(0);
    }
}
void main(){
    n=load();//这里先从文件中读取数据,并返回读取的单词个数
    menu();
}
int load()
{
    int i;
    if((fp=fopen("words.txt","a+"))==NULL)
    {
        printf("\ncannot open file!\n");
        return NULL;
    }
    for(i=0;!feof(fp);i++)
        fscanf(fp,"%s",word[i]);
    fclose(fp);
    return i;
}
void save(int n)
{
    FILE *fp;
    int i;
    if((fp=fopen("words.txt","a+"))==NULL)
    {
        printf("\ncannot open file!\n");
        exit(0);
    }
    for(i=0;i<n;i++)
    {
        if(i<n-1)
            fprintf(fp,"%s ",word[i]);
        else
            fprintf(fp,"%s",word[i]);
    }
    fclose(fp);
}
void sort()
{
    int i,j,k;
    char c[20];
    /*if((n=load())==0)
    {
    printf("\n cannot open file!\n");
    exit(0);
    }*/
    for(i=0;i<n;i++)
    {
        for(j=0;j<n-i-1;j++)
        {
            if(strcmp(word[j],word[j+1])>0)
            {
                strcmp(c,word[j]);
                strcmp(word[j],word[j+1]);
                strcmp(word[j+1],c);
            }
        }

    }
    save(n);
    printf("successful!\n");
    printf("\nNow? 1.browse all 2.back");
    scanf("%d",&k);
    if(k==1)
        browse();
    else if(k==2)
        menu();
}
void order()
{
    int a[N],i,j,t;
    //struct words;
    //n=load();
    for(i=0;i<N;i++)
        for(i=0;i<N-1;i++)
            for(j=i+i;j<N;j++)
                if(a[i]>a[j])
                {
                    t=a[i];
                    a[i]=a[j];
                    a[j]=t;
                }
                for(j=0;j<N;j++)
                    printf("%3d",a[i]);
}
void modify(int a)
{
    char c[20];
    printf("Enter the new word:");
    scanf("%s",c);
    strcpy(word[a],c);
    save(n);
}
void del(int a)
{
    int x,i,y;
    printf("are you sure to delete this word?\n\t1.sure 2.no and back menu []\b\b");
    scanf("%d",&x);
    if(x==1)
    {
        for(i=a;i<n-1;i++) //这里从a开始
            strcpy(word[i],word[i+1]);
        n-=1;
        save(n);
        printf("successful! now? 1.one more 2.back menu");
        scanf("%d",&y);
        if(y==1)
            search();
        else if(y==2)
            menu();
    }
    else if(x==2)
    {
        menu();
    }
}
void add()
{
    int i,x,u,v,w;
    char c[20];
    /*if((n=load())==0)
    exit(0);
    else*/
    {
        puts("Enter the new word!\n");
        scanf("%s",c);
        for(i=0;i<n;i++)
        {
            if(strcmp(word[i],c)==0)
                break;
        }
        if(i<n)
        {
            w=1;
            do
            {
                printf("the word has already exit!\n");
                printf("\n\nwhat do you want to do?\n\t1.enter one more 2.back menu []\b\b");
                scanf("%d",&x);
                if(x<1||x>2)
                    u=1;
                else
                    u=0;
            }while(u==1);
            if(x==1)
                add();
            else
                menu();
        }
        else
        {
            v=1;
            strcpy(word[i],c);
            n+=1;
            save(n);
            printf("successful! now choice what you will do next?\n\t1.add another 2.back menu [ ]\b\b");
            do
            {
                scanf("%d",&x);
                if(x<1||x>2)
                    v=1;
                else
                    v=0;
            }while(v==1);
        }
        switch(x)
        {
        case 1:add();break;
        case 2:menu();break;
        }
    }
}
void browse()
{
    int i,w;
    /*if((n=load())==0)
    {
    printf("\n cannot open file\n");
    exit(0);
    }*/
    for(i=0;i<n;i++)
        printf("%s/n",word[i]);
    puts("successful! now 1.back menu 2.sort");
    scanf("%d",&w);
    if(w==1)
        menu();
    else if(w==2)
        sort();
}
void search()
{
    int i,x,y;
    char vs[20];
    /*if((n=load())==0)
    {
    printf("\n cannot open file\n");
    exit(0);
    }*/
    printf("Enter the word what you want to search:\n");
    scanf("%s",vs);
    for(i=0;i<n;i++)
    {
        if(strcmp(word[i],vs)==0)
        {
            printf("successful!\n the word is %s\n",word[i]);
            printf("what would you like to do with the word?\n\t 1.modify 2.delrte 3.nothing []\b\b");
            scanf("%d",&y);
            if(y==1)
                modify(i);
            else{del(i);}
        }
    }
    if(i==n)
        printf("hoho!sorry.not found~");
    printf("now.1.one more 2.back 3exit");
    scanf("%d",&x);
    switch(x)
    {
    case 1:search();break;
    case 2:menu();break;
    case 3:exit(0);
    }
}

不是你写的代码呗?
说说你具体发现的错误现象
具体哪个函数的原理你不理解呢?还是所有的都不理解?
static char a[ROWS][COLS];就是字典
load函数从文件里读取字典数据到a数组
save函数则将编辑完成后的字典数据存储到文件

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632