函数不能正常运行,求看看,求zhidian

除了f1函数,感觉其他函数运行都有问题,不知道问题在哪儿,求指点😭😭


#include
#include
#include
#include
#include
#define len sizeof(list)
typedef struct List{    
    char name[20];        //姓名 
    char num[40];        //成员号 
    char sex[5];        //性别 
    char address[40];    //地址 
    char phone[20];        //电话号 
    struct List *next;
}list;
list *head=NULL;
void mainmenu();        //主菜单 
void readfile();
void show_one(list *p);
void f1();                //新建成员信息 
void f2();                //删除成员信息 
void f3();                //修改成员信息 
void f4();                //浏览成员信息 
void f5();                //查询成员信息 
void f6();                //保存成员信息 
list *findbyname();                //通过成员号查询
list *findbynum();                  //通过成员姓名查询
list *findbyaddress();           //通过成员地址查询
list *findbyphone();             //通过电话号码查询 

int main()
{ 
    int  k;
    mainmenu();
    readfile();
    loop:printf("请选择您的操作:");
    scanf("%d",&k);
//    while(1)
//    {
        if(k>=1&&k<=7)
        {
            switch(k)
            {
                case 1:    f1();
                           goto loop;
                           break;
                case 2:    f2();
                           break;
                case 3:    f3();
                        break;
                case 4:    f4();
                          break;
                case 5:    f5();
                       break;
                case 6:    f6();
                       break;
                case 7:mainmenu();
                       break;            
            }
        }    
//    }
    return 0;
}
void mainmenu()            //主菜单 
{
    system("color 1F");
    printf("                     欢迎使用足球俱乐部通讯录管理系统\n");
    printf("★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆\n");
    printf("☆********************************************************************★\n");
    printf("★                          足球俱乐部通讯录管理系统                            ☆\n");
    printf("☆                                                                    ★\n");
    printf("★          1.新建成员信息               2.删除成员信息               ☆\n");
    printf("☆                                                                    ★\n");
    printf("★          3.修改成员信息               4.浏览成员信息               ☆\n");
    printf("☆                                                                    ★\n");
    printf("★          5.查询成员信息               6.保存成员信息               ☆\n");
    printf("☆                                                                    ★\n");
    printf("☆********************************************************************★\n");
    printf("★                          输入7返回主菜单                           ☆\n");    
    printf("☆          -------------------------------------------               ★\n");
}
void readfile() 
{
    FILE *fp;
    list *p1, *p2, *p3;
    p1=p2=(list *)malloc(len);
    head=NULL;
    if((fp=fopen("通讯录", "r"))==NULL) 
    {
        printf("未建立通讯录,请输入1新建成员信息!\n");
    }
    else 
    {
        if(p1!=NULL)
        head=p1;
        while(1) 
        {
            if(!feof(fp)) 
            {
                fscanf(fp, "%s%s%s%s%s", p1->name, p1->num, p1->sex, p1->address, p1->phone);
                p2->next=p1;
                p3=p2;
                p2=p1;
                p1=(list *)malloc(len);
            }
            else 
            {
                p3->next = NULL;
                break;
            }
        }
    }
    fclose(fp);
}
void show_one(list *p) 
{
    printf("姓名:%s\t\t", p->name);
    printf("成员号:%d\n", p->num);
    printf("性别:%s\t", p->sex);
    printf("住址:%s\t", p->address);
    printf("电话号码:%s\t", p->phone);
}
void f1()
{
    list *p1,*p2;
    p1=(list *)malloc(len);    
    printf("请输入姓名:");
    scanf("%s",p1->name);
    printf("请输入成员号:");
    scanf("%s",p1->num);
    printf("请输入成员性别:");
    scanf("%s",p1->sex);
    printf("请输入成员地址:");
    scanf("%s",p1->address);
    printf("请输入成员电话号码:");
    scanf("%s",p1->phone);
    p1->next=NULL;
    if (head==NULL) 
    {
        head=(list *)malloc(len);
        head->next=p1;
    } 
    else
    {
        for (p2=head;p2->next!=NULL;p2=p2->next);    
        p2->next=p1;
    }
    printf("添加成功!\n");
}
void f2()
{
    printf("请输入要删除的成员姓名\n");
    list *p=findbyname();
    list *t=NULL;
    if (p==NULL)
        printf("对不起,没有找到该成员\n");
    else 
    {
        show_one(p);
        t=p->next;                   
        p->next=p->next->next;            
        printf("删除成功!\n");
    }    
}
void f3()
{
    list *p;
    char name[20];
    int k, flag = 1;
    printf("\n\t\t\t☆☆☆修改数据☆☆☆\n");
    printf("----------------------------------------------------------------------\n");
    printf("---------------------请输入需要修改的成员姓名:---------------------\n");
    scanf("%s", name);
    while(p!=NULL) 
    {
        if(strcmp(p->name, name) == 0) 
        {
           show_one(p);
            flag = 0;
            printf("\n------------------请选择要修改的信息:---------------------------\n");
            printf("+------------------------------------------------+\n");
            printf("|                                                |\n");
            printf("|          1.姓名              4.地址            |\n");
            printf("|                                                |\n");
            printf("|          2.成员号            5.电话号码        |\n");
            printf("|                                                |\n");
            printf("|          3.性别                                |\n");
            printf("|                                                |\n");
            printf("+------------------------------------------------+\n");
            scanf("%d", &k);
            switch(k) 
            {
                case 1: printf("输入修改后的姓名:\n");
                scanf("%s", p->name);
                break;
                case 2: printf("输入修改后的成员号:\n");
                scanf("%s", p->num);
                break;
                case 3: printf("输入修改后的性别:\n");
                scanf("%s", p->sex);
                break;
                case 4: printf("输入修改后的地址:\n");
                scanf("%s", p->address);
                break;
                case 5: printf("输入修改后的电话号码:\n");
                scanf("%s", p->phone);
                break;
            }
            printf("修改成功!\n");
            break;
        }
        else p=p->next;
    }
    if(flag)
        printf("查无此人\n");
}
void f4()
{
    list *p=NULL;
    if (head==NULL) 
    {
        printf("查无此人\n");
        return;
    }
    for (p=head;p->next!=NULL;p=p->next)
        show_one(p);        
}
void f5()
{
    int k;
    printf("\n                         ***    1.按姓名查找      ***    \n");
    printf("\n                         ***    2.按成员号查找    ***    \n");
    printf("\n                         ***    3.按地址查找      ***    \n");
    printf("\n                         ***    4.按电话号码查找  ***    \n");
    printf("请选择查找方式:");
    scanf("%d",&k);
    list *p;
    switch (k) 
    {
        case 1: p=findbyname();                
                break;
        case 2:    p=findbynum();                
                break;
        case 3:    p=findbyaddress();                
                break;
        case 4:    p=findbyphone();                
                break;
    }
    if (p==NULL)
        printf("查无此人\n");
    else 
    {
        printf("找到该用户!\n");
        show_one(p);
    }    
}
list *findbyname() 
{
    char name[20];
    list *p=NULL;
    printf("请输入成员姓名:");
    scanf("%s",name);
    if (head == NULL) 
    {
        printf("查无此人\n");
        return NULL;
    } 
    else 
    {
        for(p=head;p->next!=NULL;p=p->next) 
        {
            if (strcmp(p->next->name, name)==0)
                return p;
        }
        return NULL;
    }
}
list *findbynum() 
{
    char num[40];
    list *p = NULL;
    printf("请输入成员号:");
    scanf("%s",num);
    if (head==NULL) 
    {
        printf("查无此人\n");
        return NULL;
    } 
    else
    {
        for(p=head;p->next!=NULL;p=p->next) 
        {
            if (strcmp(p->next->num,num)==0)
                return p;
        }
        return NULL;
    }
}
list *findbyaddress() 
{
    char address[40];
    list *p = NULL;
    printf("请输入成员地址:");
    scanf("%s",address);
    if (head==NULL) 
    {
        printf("查无此人\n");
        return NULL;
    } 
    else 
    {
        for(p=head;p->next!=NULL;p=p->next) 
        {
            if (strcmp(p->next->address,address)==0)
                return p;
        }
        return NULL;
    }
}
list *findbyphone() 
{
    char phone[20];
    list *p = NULL;
    printf("请输入成员电话号码:");
    scanf("%s",phone);
    if (head==NULL) 
    {
        printf("查无此人\n");
        return NULL;
    } 
    else
    {
        for(p=head;p->next!=NULL;p=p->next) 
        {
            if (strcmp(p->next->phone,phone)==0)
                return p;
        }
        return NULL;
    }
}
void f6()
{
    FILE *fp;
    list *p2;
    if((fp = fopen("通讯录", "w")) == NULL)
    {
        printf("cannot open this file\n");
        exit(0);
    }
    while(p2 != NULL) 
    {
        fprintf(fp, "%s\t", p2->name);
        fprintf(fp, "%s\t", p2->num);
        fprintf(fp, "%s\t", p2->sex);
        fprintf(fp, "%s\t", p2->address);
        fprintf(fp, "%s\t", p2->phone);
        p2 = p2->next;
        fputc('\n', fp);
    }
    printf("\n保存成功\n");
    fclose(fp);
} 

修改完善如下,改动处见注释,供参考:

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<malloc.h>
#include<windows.h>
#define len sizeof(list)
typedef struct List{
    char name[20];        //姓名
    char num[40];        //成员号
    char sex[5];        //性别
    char address[40];    //地址
    char phone[20];      //电话号
    struct List *next;
}list;
list *head=NULL;
void mainmenu();        //主菜单
void readfile();
void show_one(list *p);
void f1();             //新建成员信息
void f2();             //删除成员信息
void f3();             //修改成员信息
void f4();             //浏览成员信息
void f5();             //查询成员信息
void f6();             //保存成员信息
list *findbyname();    //通过成员号查询
list *findbynum();     //通过成员姓名查询
list *findbyaddress(); //通过成员地址查询
list *findbyphone();   //通过电话号码查询
int main()
{
    int  k = 1;//修改
    readfile();
    while(k)  //修改
    {
        mainmenu();
        printf("请选择您的操作:");
        scanf("%d",&k);
        //if(k>=1&&k<=7)修改
        //{             修改
            switch(k)
            {
                case 1:f1();
                      // goto loop;修改
                       break;
                case 2:f2();
                       break;
                case 3:f3();
                       break;
                case 4:f4();
                       break;
                case 5:f5();
                       break;
                case 6:f6();
                       break;
                case 7:k=0;break; //mainmenu(); 修改
                default:break;
            }
            system("pause"); //修改
        //} 修改
    }
    return 0;
}
void mainmenu()            //主菜单 
{
    system("color 1F");
    printf("                     欢迎使用足球俱乐部通讯录管理系统\n");
    printf("★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆\n");
    printf("☆********************************************************************★\n");
    printf("★                       足球俱乐部通讯录管理系统                     ☆\n");
    printf("☆                                                                    ★\n");
    printf("★          1.新建成员信息               2.删除成员信息               ☆\n");
    printf("☆                                                                    ★\n");
    printf("★          3.修改成员信息               4.浏览成员信息               ☆\n");
    printf("☆                                                                    ★\n");
    printf("★          5.查询成员信息               6.保存成员信息               ☆\n");
    printf("☆                                                                    ★\n");
    printf("☆********************************************************************★\n");
    printf("★                           7.退出系统                               ☆\n");
    printf("☆          --------------------------------------------              ★\n");
}
void readfile()
{
    FILE *fp;
    list *p1, *p2, *p3;
    //p1=p2=(list *)malloc(len); 修改
    //head=NULL;                 修改
    if((fp=fopen("通讯录", "r"))==NULL)
    {
        printf("未建立通讯录,请输入1新建成员信息!\n");
    }
    else
    {
        if(head==NULL){ //if(p1!=NULL)
            head=(list*)malloc(len); //修改
            p2=head;                 //修改
        }
        else                         //修改
            for(p2=head;p2->next;p2=p2->next);//修改
        while(1)
        {
            //if(!feof(fp))修改
            //{            修改
            p1=(list *)malloc(len);  //修改
            p1->next=NULL;           //修改
            if (fscanf(fp, "%s%s%s%s%s", p1->name, p1->num,
                                p1->sex, p1->address, p1->phone) != 5){ //修改
                free(p1);
                break;
            }
            p2->next=p1;
            //p3=p2; 修改
            p2=p1;
            //p1=(list *)malloc(len);修改
            //}
            //else 修改
            //{     修改
            //    p3->next = NULL;修改
            //    break;       修改
            //}                修改
        }
        fclose(fp); //修改
    }
    //fclose(fp);
}
void show_one(list *p) 
{
    printf("姓名:%s\t\t", p->name);
    printf("成员号:%s\n", p->num); //printf("成员号:%d\n", p->num); 修改
    printf("性别:%s\t", p->sex);
    printf("住址:%s\t", p->address);
    printf("电话号码:%s\n", p->phone);// printf("电话号码:%s\t", p->phone); 修改
}
void f1()
{
    list *p1,*p2;
    p1=(list *)malloc(len);    
    printf("请输入姓名:");
    scanf("%s",p1->name);
    printf("请输入成员号:");
    scanf("%s",p1->num);
    printf("请输入成员性别:");
    scanf("%s",p1->sex);
    printf("请输入成员地址:");
    scanf("%s",p1->address);
    printf("请输入成员电话号码:");
    scanf("%s",p1->phone);
    p1->next=NULL;
    if (head==NULL) 
    {
        head=(list *)malloc(len);
        head->next=p1;
    } 
    else
    {
        for (p2=head;p2->next!=NULL;p2=p2->next);    
        p2->next=p1;
    }
    printf("添加成功!\n");
}
void f2()
{
    printf("请输入要删除的成员姓名\n");
    list *p=findbyname();
    list *t=NULL;
    if (p==NULL)
        printf("对不起,没有找到该成员\n");
    else 
    {
        show_one(p->next); //show_one(p);修改
        t=p->next;                   
        p->next=p->next->next;
        free(t);                 //修改
        printf("删除成功!\n");
    }    
}
void f3()
{
    if (head == NULL || head->next == NULL)  return;  //修改
    list *p = head->next; // 修改
    char name[20];
    int k, flag = 1;
    printf("\n\t\t\t☆☆☆修改数据☆☆☆\n");
    printf("----------------------------------------------------------------------\n");
    printf("---------------------请输入需要修改的成员姓名:---------------------\n");
    scanf("%s", name);
    while(p!=NULL) 
    {
        if(strcmp(p->name, name) == 0) 
        {
            show_one(p);
            flag = 0;
            printf("\n------------------请选择要修改的信息:---------------------------\n");
            printf("+------------------------------------------------+\n");
            printf("|                                                |\n");
            printf("|          1.姓名              4.地址            |\n");
            printf("|                                                |\n");
            printf("|          2.成员号            5.电话号码        |\n");
            printf("|                                                |\n");
            printf("|          3.性别                                |\n");
            printf("|                                                |\n");
            printf("+------------------------------------------------+\n");
            scanf("%d", &k);
            switch(k) 
            {
                case 1: printf("输入修改后的姓名:\n");
                scanf("%s", p->name);
                break;
                case 2: printf("输入修改后的成员号:\n");
                scanf("%s", p->num);
                break;
                case 3: printf("输入修改后的性别:\n");
                scanf("%s", p->sex);
                break;
                case 4: printf("输入修改后的地址:\n");
                scanf("%s", p->address);
                break;
                case 5: printf("输入修改后的电话号码:\n");
                scanf("%s", p->phone);
                break;
            }
            printf("修改成功!\n");
            break;
        }
        else p=p->next;
    }
    if(flag)
        printf("查无此人\n");
}
void f4()
{
    list *p=NULL;
    if (head==NULL)
    {
        printf("查无此人\n");
        return;
    }
    for (p=head;p->next!=NULL;p=p->next)
        show_one(p->next);   //show_one(p); 修改
}
void f5()
{
    int k;
    printf("\n                         ***    1.按姓名查找      ***    \n");
    printf("\n                         ***    2.按成员号查找    ***    \n");
    printf("\n                         ***    3.按地址查找      ***    \n");
    printf("\n                         ***    4.按电话号码查找  ***    \n");
    printf("请选择查找方式:");
    scanf("%d",&k);
    list *p = NULL;
    switch (k)
    {
        case 1: p=findbyname();
                break;
        case 2:    p=findbynum();
                break;
        case 3:    p=findbyaddress();
                break;
        case 4:    p=findbyphone();
                break;
    }
    if (p==NULL)
        printf("查无此人\n");
    else
    {
        printf("找到该用户!\n");
        show_one(p->next); //show_one(p); 修改
    }
}
list *findbyname() 
{
    char name[20];
    list *p=NULL;
    printf("请输入成员姓名:");
    scanf("%s",name);
    if (head == NULL) 
    {
        printf("查无此人\n");
        return NULL;
    } 
    else
    {
        for(p=head;p->next!=NULL;p=p->next) 
        {
            if (strcmp(p->next->name, name)==0)
                return p;
        }
        return NULL;
    }
}
list *findbynum() 
{
    char num[40];
    list *p = NULL;
    printf("请输入成员号:");
    scanf("%s",num);
    if (head==NULL) 
    {
        printf("查无此人\n");
        return NULL;
    } 
    else
    {
        for(p=head;p->next!=NULL;p=p->next) 
        {
            if (strcmp(p->next->num,num)==0)
                return p;
        }
        return NULL;
    }
}
list *findbyaddress() 
{
    char address[40];
    list *p = NULL;
    printf("请输入成员地址:");
    scanf("%s",address);
    if (head==NULL) 
    {
        printf("查无此人\n");
        return NULL;
    } 
    else
    {
        for(p=head;p->next!=NULL;p=p->next) 
        {
            if (strcmp(p->next->address,address)==0)
                return p;
        }
        return NULL;
    }
}
list *findbyphone() 
{
    char phone[20];
    list *p = NULL;
    printf("请输入成员电话号码:");
    scanf("%s",phone);
    if (head==NULL) 
    {
        printf("查无此人\n");
        return NULL;
    } 
    else
    {
        for(p=head;p->next!=NULL;p=p->next) 
        {
            if (strcmp(p->next->phone,phone)==0)
                return p;
        }
        return NULL;
    }
}
void f6()
{
    FILE *fp;
    if (head == NULL || head->next == NULL)  return;  //修改
    list *p2 = head->next; //修改
    if((fp = fopen("通讯录", "w")) == NULL)
    {
        printf("cannot open this file\n");
        exit(0);
    }
    while(p2 != NULL) 
    {
        fprintf(fp, "%s\t", p2->name);
        fprintf(fp, "%s\t", p2->num);
        fprintf(fp, "%s\t", p2->sex);
        fprintf(fp, "%s\t", p2->address);
        fprintf(fp, "%s\t", p2->phone);
        p2 = p2->next;
        fputc('\n', fp);
    }
    printf("\n保存成功\n");
    fclose(fp);
}

在输入信息之后查询,结果是不一样的,是哪里有问题吗