求助!求助!被困扰一下午了

######今天写课设的时候突然遇到的问题,本来一切都正常,但是不知道为什么第3个功能就不能输入信息了,还显示什么堆损坏,之后用第3个功能输入信息后,就会直接退出程序,之后第一个功能也出问题了,还跳出来一个叫stdio.h的文件,找了好久找不到问题,求大佬解答!
我们这个学期学的数据结构,但是c++不是太了解,许多地方还是用c语音的方式写的。
这是代码:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAX_NAME 20
#define MAX_NUMBER 20
#define MAX_SEX 5
#define MAXSIZE 100
typedef struct Contact {
    char name[MAX_NAME];
    int age;
    char phone[MAX_NUMBER];
    char sex[MAX_SEX];
}Contact;//定义联系人数据
typedef struct Contacts {
    Contact phonebook[MAXSIZE];//联系人数组
    int length;//已记录的联系人数量
}Contacts;//定义通讯录
void Clean(void) {
    getchar();
    system("cls");

}
void InitContacts(Contacts*& C) {
    C = (Contacts*)malloc(sizeof(Contacts));//给通讯录分配动态内存
    C->length = 0;
};//初始化通讯录//初始化
void CreateContacts(Contacts*& C) {
    InitContacts(C);
    C = (Contacts*)malloc(sizeof(Contact));//给通讯录分配动态内存
    printf("请输入第一个联系人以建立通讯录。\n");
    printf("请输入第一个联系人的姓名:"); scanf_s("%s", C->phonebook[0].name, 20); getchar();

    printf("请输入第一个联系人的年龄:"); scanf_s("%d", &C->phonebook[0].age); getchar();

    printf("请输入第一个联系人的电话:"); scanf_s("%s", C->phonebook[0].phone, 12); getchar();
    printf("请输入第一个联系人的性别:"); scanf_s("%s", C->phonebook[0].sex, 5); getchar();
    C->length = 1;
    printf("\n");
    printf("你输入的第一个联系人信息为:\n");
    printf("姓名:%s\n", C->phonebook[0].name);
    printf("性别:%s\n", C->phonebook[0].sex);
    printf("年龄:%d\n", C->phonebook[0].age);
    printf("电话号码:%s\n", C->phonebook[0].phone);
    printf("通讯录创建成功;\n");
}
void Findbyname(Contacts*& C) {
    char name[MAX_NAME];
    int i;
    int m = 0;
    printf("请输入联系人姓名:");
    scanf_s("%s", name, 20);
    getchar();
    for (i = 0; i < C->length; i++) {
        if (strcmp(name, C->phonebook[i].name) == 0) {
            printf("该联系人的基本信息为:\n");
            printf("姓名:%s\n", C->phonebook[i].name);
            printf("性别:%s\n", C->phonebook[i].sex);
            printf("年龄:%d\n", C->phonebook[i].age);
            printf("电话号码:%s\n", C->phonebook[i].phone);
            getchar();
            m = 1;
            break;
        }
    }
    if (m == 0) {
        printf("你要找的联系人不存在\n");
        Clean();
    }
}
void Findbyphone(Contacts*& C) {
    char phone[MAX_NUMBER];
    int i;
    int m = 0;
    printf("请输入联系人电话:");
    scanf_s("%s", phone, 20);
    getchar();
    for (i = 0; i < C->length; i++) {
        if (strcmp(phone, C->phonebook[i].phone) == 0) {
            printf("该联系人的基本信息为:\n");
            printf("姓名:%s\n", C->phonebook[i].name);
            printf("性别:%s\n", C->phonebook[i].sex);
            printf("年龄:%d\n", C->phonebook[i].age);
            printf("电话号码:%s\n", C->phonebook[i].phone);
            getchar();
            m = 1;
            break;
        }
    }
    if (m == 0) {
        printf("你要找的联系人不存在\n");
        Clean();
    }
}
void FindContact(Contacts*& C) {
    system("cls");
    int n;
    printf("输入你想要的查询方法:\n");
    printf("------------------------\n");
    printf("------1.按名字查询-------\n");
    printf("------2.按电话查询-------\n");
    printf("------------------------\n");
    scanf_s("%d", &n);
    switch (n)
    {
    case 1:Findbyname(C); break;
    case 2:Findbyphone(C); break;
    }
}//查找联系人,两种不同方法,按名字和电话        

int AddContact(Contacts*& C) {
    int i;
    int m = 0;
    if (C->length == MAXSIZE)
        printf("联系人已满,无法继续添加。");
    else
    {
        printf("请输入该联系人的电话:"); scanf_s("%s", C->phonebook[C->length].phone, 12); getchar();

        for (i = 0; i < C->length; i++) {//判断电话号码是否已经存在
            if (strcmp(C->phonebook[C->length].phone, C->phonebook[i].phone) == 0) {
                printf("该联系人已存在,请重新输入。");
                C->phonebook[C->length].phone[MAX_NUMBER] = { '\0' };
                getchar();
                m = 1;
                break;
            }
        }
        if (m == 1) {
            return 0;
        }
        else {

            printf("请输入该联系人的姓名:"); scanf_s("%s", C->phonebook[C->length].name, 20); getchar();

            printf("请输入该联系人的年龄:"); scanf_s("%d", &C->phonebook[C->length].age); getchar();

            printf("请输入该联系人的性别:"); scanf_s("%s", C->phonebook[C->length].sex, 5); getchar();
            printf("该联系人添加成功\n");
            C->length++;
        }
    }
}//添加联系人
void Deletebyphone(Contacts*& C) {
    int i, j;
    int p = 0;
    char phone[MAX_NUMBER] = { '\0' };
    printf("请输入你要删除的联系人的电话号码:\n");
    scanf_s("%s", phone, 12); getchar();
    for (i = 0; i < C->length; i++) {
        if (strcmp(phone, C->phonebook[i].phone) == 0) {
            printf("该联系人的基本信息为:\n");
            break;
        }
        else {
            printf("未找到该联系人相关信息。\n");
            getchar(); break;
        }
    }
}//删除联系人
void Display(Contacts*& C) {
    int i;
    printf("通讯录中共%d人\n", C->length);
    printf("通讯录中的联系人为:\n");
    for (i = 0; i < C->length; i++) {
        printf("第%d位联系人的基本信息:\n", i + 1);
        printf("姓名:%s\n", C->phonebook[i].name);
        printf("性别:%s\n", C->phonebook[i].sex);
        printf("年龄:%d\n", C->phonebook[i].age);
        printf("电话号码:%s\n", C->phonebook[i].phone);
        printf("\n");
    }
    getchar();
}
void Distroy(Contacts*& C) {
    free(C);
    exit(0);
}
void meun(Contacts*& C) {
    while (true) {
        int k = 0;
        printf("---------------------------------\n");
        printf("-----1.创建通讯录。---------------\n");
        printf("-----2.查询联系人-----------------\n");
        printf("-----3.添加联系人-----------------\n");
        printf("-----4.删除联系人-----------------\n");
        printf("-----5.展示通讯录所有信息----------\n");
        printf("-----6.退出----------------------\n");
        printf("---------------------------------\n");
        scanf_s("%d", &k);
        switch (k)
        {
        case 1:CreateContacts(C); Clean(); break;
        case 2:FindContact(C); Clean(); break;
        case 3:AddContact(C); Clean(); break;
        case 4:Deletebyphone(C); Clean(); break;
        case 5:Display(C); Clean(); break;
        case 6:Distroy(C); break;
        }
    }
}
int main(void) {
    Contacts* c;
    meun(c);
    return 0;
}

更新后的完整代码:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAX_NAME 20
#define MAX_NUMBER 20
#define MAX_SEX 5
#define MAXSIZE 100
typedef struct Contact {
    char name[MAX_NAME];
    int age;
    char phone[MAX_NUMBER];
    char sex[MAX_SEX];
}Contact;//定义联系人数据
typedef struct Contacts {
    Contact phonebook[MAXSIZE];//联系人数组
    int length;//已记录的联系人数量
}Contacts;//定义通讯录
void Clean(void) {
    getchar();
    system("cls");
}
void InitContacts(Contacts*& C) {
    C = (Contacts*)malloc(sizeof(Contacts));//给通讯录分配动态内存
    C->length = 0;
};//初始化通讯录//初始化
void CreateContacts(Contacts*& C) {
    InitContacts(C);
    C = (Contacts*)malloc(sizeof(Contact));//给通讯录分配动态内存
    printf("请输入第一个联系人以建立通讯录。\n");
    printf("请输入第一个联系人的姓名:"); scanf_s("%s", C->phonebook[0].name, 20); getchar();
    printf("请输入第一个联系人的年龄:"); scanf_s("%d", &C->phonebook[0].age); getchar();
    printf("请输入第一个联系人的电话:"); scanf_s("%s", C->phonebook[0].phone, 12); getchar();
    printf("请输入第一个联系人的性别:"); scanf_s("%s", C->phonebook[0].sex, 5); getchar();
    C->length = 1;
    printf("\n");
    printf("你输入的第一个联系人信息为:\n");
    printf("姓名:%s\n", C->phonebook[0].name);
    printf("性别:%s\n", C->phonebook[0].sex);
    printf("年龄:%d\n", C->phonebook[0].age);
    printf("电话号码:%s\n", C->phonebook[0].phone);
    printf("通讯录创建成功;\n");
}
void Findbyname(Contacts*& C) {
    char name[MAX_NAME];
    int i;
    int m = 0;
    printf("请输入联系人姓名:");
    scanf_s("%s", name, 20);
    getchar();
    for (i = 0; i < C->length; i++) {
        if (strcmp(name, C->phonebook[i].name) == 0) {
            printf("该联系人的基本信息为:\n");
            printf("姓名:%s\n", C->phonebook[i].name);
            printf("性别:%s\n", C->phonebook[i].sex);
            printf("年龄:%d\n", C->phonebook[i].age);
            printf("电话号码:%s\n", C->phonebook[i].phone);
            getchar();
            m = 1;
            break;
        }
    }
    if (m == 0) {
        printf("你要找的联系人不存在\n");
        Clean();
    }
}
void Findbyphone(Contacts*& C) {
    char phone[MAX_NUMBER];
    int i;
    int m = 0;
    printf("请输入联系人电话:");
    scanf_s("%s", phone, 20);
    getchar();
    for (i = 0; i < C->length; i++) {
        if (strcmp(phone, C->phonebook[i].phone) == 0) {
            printf("该联系人的基本信息为:\n");
            printf("姓名:%s\n", C->phonebook[i].name);
            printf("性别:%s\n", C->phonebook[i].sex);
            printf("年龄:%d\n", C->phonebook[i].age);
            printf("电话号码:%s\n", C->phonebook[i].phone);
            getchar();
            m = 1;
            break;
        }
    }
    if (m == 0) {
        printf("你要找的联系人不存在\n");
        Clean();
    }
}
void FindContact(Contacts*& C) {
    system("cls");
    int n;
    printf("输入你想要的查询方法:\n");
    printf("------------------------\n");
    printf("------1.按名字查询-------\n");
    printf("------2.按电话查询-------\n");
    printf("------------------------\n");
    scanf_s("%d", &n);
    switch (n)
    {
    case 1:Findbyname(C); break;
    case 2:Findbyphone(C); break;
    }
}//查找联系人,两种不同方法,按名字和电话        
int AddContact(Contacts*& C) {
    int i;
    int m = 0;
    if (C->length == MAXSIZE)
        printf("联系人已满,无法继续添加。");
    else
    {
        printf("请输入该联系人的电话:"); scanf_s("%s", C->phonebook[C->length].phone, 12); getchar();
        for (i = 0; i < C->length; i++) {//判断电话号码是否已经存在
            if (strcmp(C->phonebook[C->length].phone, C->phonebook[i].phone) == 0) {
                printf("该联系人已存在,请重新输入。");
                C->phonebook[C->length].phone[MAX_NUMBER - 1] = 0;
                getchar();
                m = 1;
                break;
            }
        }
        if (m == 1) {
            AddContact(C);
        }
        else {
            printf("请输入该联系人的姓名:"); scanf_s("%s", C->phonebook[C->length].name, 20); getchar();
            printf("请输入该联系人的年龄:"); scanf_s("%d", &C->phonebook[C->length].age); getchar();
            printf("请输入该联系人的性别:"); scanf_s("%s", C->phonebook[C->length].sex, 5); getchar();
            printf("该联系人添加成功\n");
            C->length++;
        }
    }
    return 1;
}//添加联系人
void Deletebyphone(Contacts*& C) {
    int i;
    int p = 0;
    char phone[MAX_NUMBER] = { '\0' };
    printf("请输入你要删除的联系人的电话号码:\n");
    scanf_s("%s", phone, 12); getchar();
    for (i = 0; i < C->length; i++) {
        if (strcmp(phone, C->phonebook[i].phone) == 0) {
            printf("该联系人的基本信息为:\n");
            break;
        }
        else {
            printf("未找到该联系人相关信息。\n");
            getchar(); break;
        }
    }
}//删除联系人
void Display(Contacts*& C) {
    int i;
    printf("通讯录中共%d人\n", C->length);
    printf("通讯录中的联系人为:\n");
    for (i = 0; i < C->length; i++) {
        printf("第%d位联系人的基本信息:\n", i + 1);
        printf("姓名:%s\n", C->phonebook[i].name);
        printf("性别:%s\n", C->phonebook[i].sex);
        printf("年龄:%d\n", C->phonebook[i].age);
        printf("电话号码:%s\n", C->phonebook[i].phone);
        printf("\n");
    }
    getchar();
}
void Distroy(Contacts*& C) {
    free(C);
    exit(0);
}
void meun(Contacts*& C) {
    while (true) {
        int k = 0;
        printf("---------------------------------\n");
        printf("-----1.创建通讯录。---------------\n");
        printf("-----2.查询联系人-----------------\n");
        printf("-----3.添加联系人-----------------\n");
        printf("-----4.删除联系人-----------------\n");
        printf("-----5.展示通讯录所有信息----------\n");
        printf("-----6.退出----------------------\n");
        printf("---------------------------------\n");
        scanf_s("%d", &k);
        switch (k)
        {
        case 1:CreateContacts(C); Clean(); break;
        case 2:FindContact(C); Clean(); break;
        case 3:AddContact(C); Clean(); break;
        case 4:Deletebyphone(C); Clean(); break;
        case 5:Display(C); Clean(); break;
        case 6:Distroy(C); break;
        }
    }
}
int main(void) {
    Contacts c;
    c.length = 0;
    Contacts* p = &c;
    meun(p);
    return 0;
}

C->phonebook[C->length].phone[MAX_NUMBER] = {'\0'};越界了啊。
main中C也没有分配空间,修改如下:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAX_NAME 20
#define MAX_NUMBER 20
#define MAX_SEX 5
#define MAXSIZE 100
typedef struct Contact {
    char name[MAX_NAME];
    int age;
    char phone[MAX_NUMBER];
    char sex[MAX_SEX];
}Contact;//定义联系人数据
typedef struct Contacts {
    Contact phonebook[MAXSIZE];//联系人数组
    int length;//已记录的联系人数量
}Contacts;//定义通讯录
void Clean(void) {
    getchar();
    system("cls");
}
void InitContacts(Contacts*& C) {
    C = (Contacts*)malloc(sizeof(Contacts));//给通讯录分配动态内存
    C->length = 0;
};//初始化通讯录//初始化
void CreateContacts(Contacts*& C) {
    InitContacts(C);
    C = (Contacts*)malloc(sizeof(Contact));//给通讯录分配动态内存
    printf("请输入第一个联系人以建立通讯录。\n");
    printf("请输入第一个联系人的姓名:"); scanf_s("%s", C->phonebook[0].name, 20); getchar();
    printf("请输入第一个联系人的年龄:"); scanf_s("%d", &C->phonebook[0].age); getchar();
    printf("请输入第一个联系人的电话:"); scanf_s("%s", C->phonebook[0].phone, 12); getchar();
    printf("请输入第一个联系人的性别:"); scanf_s("%s", C->phonebook[0].sex, 5); getchar();
    C->length = 1;
    printf("\n");
    printf("你输入的第一个联系人信息为:\n");
    printf("姓名:%s\n", C->phonebook[0].name);
    printf("性别:%s\n", C->phonebook[0].sex);
    printf("年龄:%d\n", C->phonebook[0].age);
    printf("电话号码:%s\n", C->phonebook[0].phone);
    printf("通讯录创建成功;\n");
}
void Findbyname(Contacts*& C) {
    char name[MAX_NAME];
    int i;
    int m = 0;
    printf("请输入联系人姓名:");
    scanf_s("%s", name, 20);
    getchar();
    for (i = 0; i < C->length; i++) {
        if (strcmp(name, C->phonebook[i].name) == 0) {
            printf("该联系人的基本信息为:\n");
            printf("姓名:%s\n", C->phonebook[i].name);
            printf("性别:%s\n", C->phonebook[i].sex);
            printf("年龄:%d\n", C->phonebook[i].age);
            printf("电话号码:%s\n", C->phonebook[i].phone);
            getchar();
            m = 1;
            break;
        }
    }
    if (m == 0) {
        printf("你要找的联系人不存在\n");
        Clean();
    }
}
void Findbyphone(Contacts*& C) {
    char phone[MAX_NUMBER];
    int i;
    int m = 0;
    printf("请输入联系人电话:");
    scanf_s("%s", phone, 20);
    getchar();
    for (i = 0; i < C->length; i++) {
        if (strcmp(phone, C->phonebook[i].phone) == 0) {
            printf("该联系人的基本信息为:\n");
            printf("姓名:%s\n", C->phonebook[i].name);
            printf("性别:%s\n", C->phonebook[i].sex);
            printf("年龄:%d\n", C->phonebook[i].age);
            printf("电话号码:%s\n", C->phonebook[i].phone);
            getchar();
            m = 1;
            break;
        }
    }
    if (m == 0) {
        printf("你要找的联系人不存在\n");
        Clean();
    }
}
void FindContact(Contacts*& C) {
    system("cls");
    int n;
    printf("输入你想要的查询方法:\n");
    printf("------------------------\n");
    printf("------1.按名字查询-------\n");
    printf("------2.按电话查询-------\n");
    printf("------------------------\n");
    scanf_s("%d", &n);
    switch (n)
    {
    case 1:Findbyname(C); break;
    case 2:Findbyphone(C); break;
    }
}//查找联系人,两种不同方法,按名字和电话        
int AddContact(Contacts*& C) {
    int i;
    int m = 0;
    if (C->length == MAXSIZE)
        printf("联系人已满,无法继续添加。");
    else
    {
        printf("请输入该联系人的电话:"); scanf_s("%s", C->phonebook[C->length].phone, 12); getchar();
        for (i = 0; i < C->length; i++) {//判断电话号码是否已经存在
            if (strcmp(C->phonebook[C->length].phone, C->phonebook[i].phone) == 0) {
                printf("该联系人已存在,请重新输入。");
                C->phonebook[C->length].phone[MAX_NUMBER-1] = 0;
                getchar();
                m = 1;
                break;
            }
        }
        if (m == 1) {
            return 0;
        }
        else {
            printf("请输入该联系人的姓名:"); scanf_s("%s", C->phonebook[C->length].name, 20); getchar();
            printf("请输入该联系人的年龄:"); scanf_s("%d", &C->phonebook[C->length].age); getchar();
            printf("请输入该联系人的性别:"); scanf_s("%s", C->phonebook[C->length].sex, 5); getchar();
            printf("该联系人添加成功\n");
            C->length++;
        }
    }
    return 1;
}//添加联系人
void Deletebyphone(Contacts*& C) {
    int i;
    int p = 0;
    char phone[MAX_NUMBER] = { '\0' };
    printf("请输入你要删除的联系人的电话号码:\n");
    scanf_s("%s", phone, 12); getchar();
    for (i = 0; i < C->length; i++) {
        if (strcmp(phone, C->phonebook[i].phone) == 0) {
            printf("该联系人的基本信息为:\n");
            break;
        }
        else {
            printf("未找到该联系人相关信息。\n");
            getchar(); break;
        }
    }
}//删除联系人
void Display(Contacts*& C) {
    int i;
    printf("通讯录中共%d人\n", C->length);
    printf("通讯录中的联系人为:\n");
    for (i = 0; i < C->length; i++) {
        printf("第%d位联系人的基本信息:\n", i + 1);
        printf("姓名:%s\n", C->phonebook[i].name);
        printf("性别:%s\n", C->phonebook[i].sex);
        printf("年龄:%d\n", C->phonebook[i].age);
        printf("电话号码:%s\n", C->phonebook[i].phone);
        printf("\n");
    }
    getchar();
}
void Distroy(Contacts*& C) {
    free(C);
    exit(0);
}
void meun(Contacts*& C) {
    while (true) {
        int k = 0;
        printf("---------------------------------\n");
        printf("-----1.创建通讯录。---------------\n");
        printf("-----2.查询联系人-----------------\n");
        printf("-----3.添加联系人-----------------\n");
        printf("-----4.删除联系人-----------------\n");
        printf("-----5.展示通讯录所有信息----------\n");
        printf("-----6.退出----------------------\n");
        printf("---------------------------------\n");
        scanf_s("%d", &k);
        switch (k)
        {
        case 1:CreateContacts(C); Clean(); break;
        case 2:FindContact(C); Clean(); break;
        case 3:AddContact(C); Clean(); break;
        case 4:Deletebyphone(C); Clean(); break;
        case 5:Display(C); Clean(); break;
        case 6:Distroy(C); break;
        }
    }
}
int main(void) {
    Contacts c;
    c.length = 0;
    Contacts *p = &c;
    meun(p);
    return 0;
}

下面加 -----------的地方是变化的


void InitContacts(Contacts*& C) {
    C = (Contacts*)malloc(sizeof(Contacts));//给通讯录分配动态内存
    memset(C, 0, sizeof(Contacts));  // 动态内存清零--------------
    C->length = 0;
}


void CreateContacts(Contacts* &C) {
    InitContacts(C); 
// 下面这一行去掉,重复申请了--------
    //C = (Contacts*)malloc(sizeof(Contact));//给通讯录分配动态内存
    printf("请输入第一个联系人以建立通讯录。\n");



int AddContact(Contacts*& C) {
    int i;
    int m = 0;
    if (C->length == MAXSIZE)
        printf("联系人已满,无法继续添加。");
    else
    {
        printf("请输入该联系人的电话:"); scanf_s("%s", C->phonebook[C->length].phone, 12); getchar();
        for (i = 0; i < C->length; i++) {//判断电话号码是否已经存在
            if (strcmp(C->phonebook[C->length].phone, C->phonebook[i].phone) == 0) {
                printf("该联系人已存在,请重新输入。");
                C->phonebook[C->length].phone[0] = { '\0' };  // 赋空 -------------------------------
                getchar();
                m = 1;
                break;
            }
        }

如没有问题,望采纳


#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAX_NAME 20
#define MAX_NUMBER 20
#define MAX_SEX 5
#define MAXSIZE 100
typedef struct Contact {
    char name[MAX_NAME];
    int age;
    char phone[MAX_NUMBER];
    char sex[MAX_SEX];
}Contact;//定义联系人数据
typedef struct Contacts {
    Contact phonebook[MAXSIZE];//联系人数组
    int length;//已记录的联系人数量
}Contacts;//定义通讯录
void Clean(void) {
    getchar();
    system("cls");
}
void InitContacts(Contacts*& C) {
    C = (Contacts*)malloc(sizeof(Contacts));//给通讯录分配动态内存
    C->length = 0;
};//初始化通讯录//初始化
void CreateContacts(Contacts*& C) {
    InitContacts(C);
    C = (Contacts*)malloc(sizeof(Contact));//给通讯录分配动态内存
    printf("请输入第一个联系人以建立通讯录。\n");
    printf("请输入第一个联系人的姓名:"); scanf_s("%s", C->phonebook[0].name, 20); getchar();
    printf("请输入第一个联系人的年龄:"); scanf_s("%d", &C->phonebook[0].age); getchar();
    printf("请输入第一个联系人的电话:"); scanf_s("%s", C->phonebook[0].phone, 12); getchar();
    printf("请输入第一个联系人的性别:"); scanf_s("%s", C->phonebook[0].sex, 5); getchar();
    C->length = 1;
    printf("\n");
    printf("你输入的第一个联系人信息为:\n");
    printf("姓名:%s\n", C->phonebook[0].name);
    printf("性别:%s\n", C->phonebook[0].sex);
    printf("年龄:%d\n", C->phonebook[0].age);
    printf("电话号码:%s\n", C->phonebook[0].phone);
    printf("通讯录创建成功;\n");
}
void Findbyname(Contacts*& C) {
    char name[MAX_NAME];
    int i;
    int m = 0;
    printf("请输入联系人姓名:");
    scanf_s("%s", name, 20);
    getchar();
    for (i = 0; i < C->length; i++) {
        if (strcmp(name, C->phonebook[i].name) == 0) {
            printf("该联系人的基本信息为:\n");
            printf("姓名:%s\n", C->phonebook[i].name);
            printf("性别:%s\n", C->phonebook[i].sex);
            printf("年龄:%d\n", C->phonebook[i].age);
            printf("电话号码:%s\n", C->phonebook[i].phone);
            getchar();
            m = 1;
            break;
        }
    }
    if (m == 0) {
        printf("你要找的联系人不存在\n");
        Clean();
    }
}
void Findbyphone(Contacts*& C) {
    char phone[MAX_NUMBER];
    int i;
    int m = 0;
    printf("请输入联系人电话:");
    scanf_s("%s", phone, 20);
    getchar();
    for (i = 0; i < C->length; i++) {
        if (strcmp(phone, C->phonebook[i].phone) == 0) {
            printf("该联系人的基本信息为:\n");
            printf("姓名:%s\n", C->phonebook[i].name);
            printf("性别:%s\n", C->phonebook[i].sex);
            printf("年龄:%d\n", C->phonebook[i].age);
            printf("电话号码:%s\n", C->phonebook[i].phone);
            getchar();
            m = 1;
            break;
        }
    }
    if (m == 0) {
        printf("你要找的联系人不存在\n");
        Clean();
    }
}
void FindContact(Contacts*& C) {
    system("cls");
    int n;
    printf("输入你想要的查询方法:\n");
    printf("------------------------\n");
    printf("------1.按名字查询-------\n");
    printf("------2.按电话查询-------\n");
    printf("------------------------\n");
    scanf_s("%d", &n);
    switch (n)
    {
    case 1:Findbyname(C); break;
    case 2:Findbyphone(C); break;
    }
}//查找联系人,两种不同方法,按名字和电话        
int AddContact(Contacts*& C) {
    int i;
    int m = 0;
    if (C->length == MAXSIZE)
        printf("联系人已满,无法继续添加。");
    else
    {
        printf("请输入该联系人的电话:"); scanf_s("%s", C->phonebook[C->length].phone, 12); getchar();
        for (i = 0; i < C->length; i++) {//判断电话号码是否已经存在
            if (strcmp(C->phonebook[C->length].phone, C->phonebook[i].phone) == 0) {
                printf("该联系人已存在,请重新输入。");
                C->phonebook[C->length].phone[MAX_NUMBER-1] = 0;
                getchar();
                m = 1;
                break;
            }
        }
        if (m == 1) {
            return 0;
        }
        else {
            printf("请输入该联系人的姓名:"); scanf_s("%s", C->phonebook[C->length].name, 20); getchar();
            printf("请输入该联系人的年龄:"); scanf_s("%d", &C->phonebook[C->length].age); getchar();
            printf("请输入该联系人的性别:"); scanf_s("%s", C->phonebook[C->length].sex, 5); getchar();
            printf("该联系人添加成功\n");
            C->length++;
        }
    }
    return 1;
}//添加联系人
void Deletebyphone(Contacts*& C) {
    int i;
    int p = 0;
    char phone[MAX_NUMBER] = { '\0' };
    printf("请输入你要删除的联系人的电话号码:\n");
    scanf_s("%s", phone, 12); getchar();
    for (i = 0; i < C->length; i++) {
        if (strcmp(phone, C->phonebook[i].phone) == 0) {
            printf("该联系人的基本信息为:\n");
            break;
        }
        else {
            printf("未找到该联系人相关信息。\n");
            getchar(); break;
        }
    }
}//删除联系人
void Display(Contacts*& C) {
    int i;
    printf("通讯录中共%d人\n", C->length);
    printf("通讯录中的联系人为:\n");
    for (i = 0; i < C->length; i++) {
        printf("第%d位联系人的基本信息:\n", i + 1);
        printf("姓名:%s\n", C->phonebook[i].name);
        printf("性别:%s\n", C->phonebook[i].sex);
        printf("年龄:%d\n", C->phonebook[i].age);
        printf("电话号码:%s\n", C->phonebook[i].phone);
        printf("\n");
    }
    getchar();
}
void Distroy(Contacts*& C) {
    free(C);
    exit(0);
}
void meun(Contacts*& C) {
    while (true) {
        int k = 0;
        printf("---------------------------------\n");
        printf("-----1.创建通讯录。---------------\n");
        printf("-----2.查询联系人-----------------\n");
        printf("-----3.添加联系人-----------------\n");
        printf("-----4.删除联系人-----------------\n");
        printf("-----5.展示通讯录所有信息----------\n");
        printf("-----6.退出----------------------\n");
        printf("---------------------------------\n");
        scanf_s("%d", &k);
        switch (k)
        {
        case 1:CreateContacts(C); Clean(); break;
        case 2:FindContact(C); Clean(); break;
        case 3:AddContact(C); Clean(); break;
        case 4:Deletebyphone(C); Clean(); break;
        case 5:Display(C); Clean(); break;
        case 6:Distroy(C); break;
        }
    }
}
int main(void) {
    Contacts c;
    c.length = 0;
    Contacts *p = &c;
    meun(p);
    return 0;
}