C程序异常退出。。。。。。

用C语言写了个简单的通讯录管理系统。。。。。。可老是会这样退出。。。。
错误:
Process exited after 13.64 seconds with return value 3221225477
源代码:
https://github.com/mhqlyh/1

修改如下,供参考:

#include <stdio.h>
#include "function.h"
#include <string.h>
#include <math.h>
#include <stdlib.h>
#define MAX_NUM 500
#define MAX_LEN 10

//function.h
//#define MAX_NUM 500
//#define MAX_LEN 10
struct person {
    int  number;    /*用户号码,姓名,地址,性别,关系*/
    char name[MAX_LEN];
    char address[64];
    int  sex;
    char relationship[64];
};

struct addressbooks {
    struct person personarray[MAX_NUM];
    int nowsize; /*当前联系人的个数*/
};

int  cleanperson(struct addressbooks *p);
void modifyperson(struct addressbooks *p);
void deleteperson(struct addressbooks *p);
void showperson(struct addressbooks *p);
void addperson(struct addressbooks *p);
void searchperson(struct addressbooks *p);
int  Isexit(struct addressbooks *p, char *name_i);
void mainfunction();


//main.c
//#include <stdio.h>
//#include "function.h"
//#include <string.h>
//#include <math.h>
//#include <stdlib.h>
//#define MAX_NUM 500
//#define MAX_LEN 10

int main() {
    struct addressbooks book1;
    book1.nowsize=0;      /*初始化*/
    int select = 0;
    while (1) {
        mainfunction();
        printf("请输入你的选择:\n");
        scanf("%d", &select);
        switch (select) {
            case 1:
                searchperson(&book1);
                break;
            case 2:
                showperson(&book1);
                break;
            case 3:
                addperson(&book1);
                break;
            case 4:
                deleteperson(&book1);
                break;
            case 5:
                modifyperson(&book1);
                break;
            case 6:
                cleanperson(&book1);
                break;
            case 0:
                printf("欢迎下次使用!\n");
                system("pause");
               exit(0);
                break;
            default:
                break;

        }
    }
    return 0;
}


//function.c
//#include"function.h"

void mainfunction() {
    printf("*******************\n");
    printf("***1、查找联系人***\n");
    printf("***2、显示联系人***\n");
    printf("***3、添加联系人***\n");
    printf("***4、删除联系人***\n");
    printf("***5、修改联系人***\n");
    printf("***6、清空联系人***\n");
    printf("***0、退出通讯录***\n");
    printf("*******************\n");
}

int Isexit(struct addressbooks *p, char *name_i) {    /*判断联系人是否存在*/
    int i, t = -1;
    for ( i = 0; i < p->nowsize; i++) {
        if (strcmp(p->personarray[i].name,name_i)==0){
            t = i;                  /*把联系人的下标储存,返回*/
            break;
        }
    }
    return t;
}

void searchperson(struct addressbooks *p) { /*查找功能*/
    char name_search[MAX_LEN];
    printf("请输入要查询联系人的姓名:\n");
    scanf("%s", name_search);
    int t = Isexit(p, name_search);
    if (t >= 0) {
        printf("姓名:%s\t", p->personarray[t].name);
        printf("号码:%lld\t", p->personarray[t].number);
        printf("性别:%s\t", (p->personarray[t].sex == 1 ? "男" : "女"));
        printf("地址:%s\t", p->personarray[t].address);
        printf("关系:%s\n", p->personarray[t].relationship);
    } else {
        printf("未查找到!\n");
    }
}

void addperson(struct addressbooks *p) {      /*添加功能*/
    if (p->nowsize == MAX_NUM) {
        printf("通讯录人数已满,无法添加!");
    } else {
        char name_scan[MAX_LEN];
        printf("请输入新添联系人的姓名:\n");
        scanf("%s",name_scan);
        strcpy(p->personarray[p->nowsize].name,name_scan);

        int number_scan;
        printf("请输入新添联系人的号码:\n");
        scanf("%d", &number_scan);
        p->personarray[p->nowsize].number = number_scan;

        int sex_scan;
        printf("请输入新添联系人的性别,0——女,1——男:\n");
        while (1) {
            scanf("%d", &sex_scan);
            if (sex_scan == 0 || sex_scan == 1) {
                p->personarray[p->nowsize].sex = sex_scan;
                break;
            } else {
                printf("输入错误,请重新输入!");
            }
        }

        char address_scan[64];
        printf("请输入新添联系人的地址:\n");
        scanf("%s", address_scan);
        strcpy(p->personarray[p->nowsize].address,address_scan);

        char relationship_scan[64];
        printf("请输入新添联系人的关系:\n");
        scanf("%s", relationship_scan);
        strcpy(p->personarray[p->nowsize].relationship,relationship_scan);

        p->nowsize++;                /*通讯录当前人数+1*/
        printf("添加成功!\n");
    }
}

void showperson(struct addressbooks *p) {                                            /*显示功能*/
    if (p->nowsize == 0) {
        printf("当前通讯录为空!\n");
    } else {
        for (int i = 0; i < p->nowsize; i++) {
            printf("姓名:%s\t", p->personarray[i].name);
            printf("号码:%d\t", p->personarray[i].number);
            printf("性别:%s\t", (p->personarray[i].sex == 1 ? "男" : "女"));
            printf("地址:%s\t", p->personarray[i].address);
            printf("关系:%s\n", p->personarray[i].relationship);
        }
                printf("\n");
    }
}

void deleteperson(struct addressbooks *p) {                                /*删除功能*/
    printf("请输入要删除的联系人:\n");
    char name_scan[MAX_LEN];
    scanf("%s", name_scan);
    int t = Isexit(p, name_scan);
    if (t >= 0) {
        for (int i = t; i < p->nowsize-1; i++) {
            p->personarray[i] = p->personarray[i + 1];
        }
        p->nowsize--;
        printf("删除成功!\n");
    } else {
        printf("未找到联系人!\n");
    }
}

void modifyperson(struct addressbooks *p) {     /*修改功能*/
    printf("请输入你要修改的联系人的姓名:\n");
    char name_scan[MAX_LEN];
    scanf("%s", name_scan);
    int t = Isexit(p, name_scan);
    if (t >= 0) {
        printf("请输入修改后的姓名:\n");
        scanf("%s", name_scan);
        strcpy(p->personarray[t].name, name_scan);
        printf("请输入号码:\n");
        int number_scan;
        scanf("%d", &number_scan);
        p->personarray[t].number = number_scan;
        printf("请输入性别,0——女,1——男:\n");
        int sex_scan;
        while (1) {
            scanf("%d", &sex_scan);
            if (sex_scan == 1 || sex_scan == 0) {
                p->personarray[t].sex = sex_scan;
                break;
            } else {
                printf("输入错误,请重新输入!");
            }
        }
        printf("请输入地址:\n");
        char address_scan[64];
        scanf("%s", &address_scan);
        strcpy(p->personarray[t].address, address_scan);
        printf("请输入关系:\n");
        char relationship_scan[64];
        scanf("%s", relationship_scan);
        strcpy(p->personarray[t].relationship,relationship_scan);
        printf("修改成功!\n");
    } else {
        printf("没有该联系人!\n");
    }
}

int cleanperson(struct addressbooks *p) {
    printf("清空后不可恢复,是否继续? 0——否,1——是");
    int select = 0;
    while (1) {
        scanf("%d", &select);
        if (select) {
            p->nowsize = 0;
            printf("通讯录已清空!\n");
            break;
        } else {
            printf("暂时不清理\n");
            break;
        }
    }
    return 0;
}