文件没办法保存怎么办

/*
以本班同学的具体数据为背景,设计一个本班同学通讯录
实现以下功能:
1) 通讯录编辑(添加、删除);
2) 按不同的项进行查找;
3) 对已存在的通讯录按不同的项排序;
4) 将通讯录写入文件;
5) 从文件读入通讯录。
备注:通讯录至少应该有以下数据项:姓名,地址,电话,邮编,E-mail。
*/

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

//*****************联系人信息*****************//
typedef struct peo
{
    char name[20];//姓名
    char wm[20];//性别
    char tele[20];//手机号码
    char postal[20];//邮编
    char mail[20];//E-Mail
    char home[100];//家庭住址
    struct peo* next;
}peo;

peo* head;//头指针

void menu()//主菜单
{
    printf("\n=======================================================\n");
    printf("              欢迎来到通讯录管理系统\n\n");
    printf("            1.输入数据         2.显示数据\n");
    printf("            3.排序数据         4.删除数据\n");
    printf("            5.查看数据         6.修改数据\n");
    printf("                     7.返回主菜单\n");
    printf("\n~~~~~~输~~~~~~入~~~~~~8~~~~~~退~~~~~~出~~~~~~程~~~~~~序\n");
}

void peo_print(peo* p1)
{
    printf("\t姓名:>");
    printf("%s\n", p1->name);
    printf("\t性别:>");
    printf("%s\n", p1->wm);
    printf("\t电话:>");
    printf("%s\n", p1->tele);
    printf("\t邮编:>");
    printf("%s\n", p1->postal);
    printf("\tE-mail:>");
    printf("%s\n", p1->mail);
    printf("\t家庭地址:>");
    printf("%s\n", p1->home);
}

//**************添加联系人信息**************//
void input()//输入数据
{
    int ans;//判断是否继续输入
    peo* p1, * p2;
    p1 = (peo*)malloc(sizeof(peo));//申请内存来用
    if (p1 != NULL)
    {
        printf("========输入数据========\n");
        head = p1;
        while (1)
        {
            printf("姓名:");
            scanf("%s", &p1->name);
            printf("性别:");
            scanf("%s", &p1->wm);
            printf("手机号码:");
            scanf("%s", &p1->tele);
            printf("邮编:");
            scanf("%s", &p1->postal);
            printf("E-Mail:");
            scanf("%s", &p1->mail);
            printf("家庭地址:");
            scanf("%s", &p1->home);
            printf("===================================\n");
            p2 = p1;
            p1 = (peo*)malloc(sizeof(peo));//申请下一个要用的空间
            if (p1 != NULL)
                p2->next = p1;
            printf("请选择是否继续输入:1.继续  2.退出\n请选择:\n");//用户选择
            scanf("%d", &ans);
            if (ans == 1)//继续
                continue;
            else//退出
            {
                printf("添加成功\n");
                p2->next = NULL;
                free(p1);//将申请的的无用内存释放
                break;
            }
        }
    }
}

//**************显示联系人信息**************//
void look(peo* p1)//显示数据
{
    printf("\n========显示数据========\n");
    while (p1 != NULL)
    {
        printf("姓名:%s\n", p1->name);
        printf("性别:%s\t", p1->wm);
        printf("手机号码:%s\t", p1->tele);
        printf("邮编:%s\t", p1->postal);
        printf("E-Mail:%s\t", p1->mail);
        printf("家庭住址:%s\n", p1->home);
        printf("=====================================\n");
        p1 = p1->next;
    }
    printf("\n========显示完毕========\n");
}

//**************删除联系人信息**************//
void deleted()//删除数据
{
    peo* p1, * p2;
    char name[20];//删除者姓名
    printf("========删除数据========\n");
    printf("请输入要删除者的姓名:");
    scanf("%s", name);
    p1 = head;
    p2 = NULL;
    if (head == NULL)//通讯录已经没数据了
    {
        printf("通讯录里什么也没有了。\n");
        printf("========删除失败========\n");
        return;
    }
    if (!strcmp(name, p1->name))//头指针就是要删除的,为什么要单独拿出来,就是为了可以在删除后改变头指针
    {
        head = p1->next;
        printf("========删除成功========\n");
        return;
    }
    while (p1 != NULL && strcmp(name, p1->name))
    {
        p2 = p1;
        p1 = p1->next;
    }
    if (p1 == NULL)//查找完了,没找到
    {
        printf("查无此人!!!!\n");
        return;
    }
    if (p1->next != NULL)//找到了,不是最后一个
    {
        p1 = p1->next;
        p2->next = p1;
        printf("========删除成功========\n");
    }
    else//是最后一个
    {
        p2->next = NULL;
        printf("========删除成功========\n");
    }
}

//**************查找联系人信息**************//
void find(peo* p1)//查找数据
{
    char name[20];//查找的名字
    char postal[20];//查找的邮编
    int flag = 0;

    printf("========查看数据========\n");
    printf("请输入|>\t1.按姓名\t2.按邮编\n|>");
    scanf("%d", &flag);
    if (flag == 1)
    {
        printf("查找:");
        scanf("%s", name);
        while (p1 != NULL)
        {
            if (!strcmp(name, p1->name))//找到了输出
            {
                peo_print(p1);
                break;
            }
            p1 = p1->next;
        }
        if (p1 == NULL)//找完了,没找到
            printf("您要查找的人不存在\n");
        printf("========结束查找========\n");
    }
    else if (flag == 2)
    {
        printf("查找:");
        scanf("%s", postal);
        while (p1 != NULL)
        {
            if (!strcmp(postal, p1->postal))//找到了输出
            {
                peo_print(p1);
                break;
            }
            p1 = p1->next;
        }
        if (p1 == NULL)//找完了,没找到
            printf("您要查找的人不存在\n");
        printf("\n========结束查找========\n");
    }
    else
    {
        printf("输入错误");
    }
}

//**************修改联系人信息**************//
void modify(peo* p1)//修改数据
{
    int n;//选择的修改内容
    char name[20];//要修改人的姓名
    printf("========修改数据========\n");
    printf("请输入要修改人的姓名:");
    scanf("%s", name);
    while (p1 != NULL)
    {
        if (!strcmp(name, p1->name))//找到了
        {
            printf("请输入:>\n");
            peo_print(p1);
            printf("\n \t1.姓名\t2.性别\t3.手机号码\t4.邮编\t5.E-Mail\t6.家庭住址\n\n:>");
            scanf("%d", &n);
            switch (n)
            {
            case 1:
                printf("姓名:");
                scanf("%s", &p1->name);
                break;
            case 2:
                printf("性别:");
                scanf("%s", &p1->wm);
                break;
            case 3:
                printf("手机号码:");
                scanf("%s", &p1->tele);
                break;
            case 4:
                printf("邮编:");
                scanf("%s", &p1->postal);
                break;
            case 5:
                printf("E-Mail:");
                scanf("%s", &p1->mail);
                break;
            case 6:
                printf("家庭住址:");
                scanf("%s", &p1->home);
                break;
            }
            printf("|>修改成功\n");
            break;
        }
        p1 = p1->next;
    }
    if (p1 == NULL)//没有找到
    {
        printf("|>联系人不存在!\n");
    }
}

void Savefile(peo* p1)//保存数据
{
    FILE* fp = NULL;
    char file[15];
    fopen_s(&fp, "contact.txt", "w");
    if (fp == NULL)//打开文件,若没有此文件可以新建立
    {
        printf("cannot open this file\n");//无法建立新文件
        return;//正常运行程序并退出程序
    }
    fprintf(fp, "姓名\t性别\t手机号码\t邮编\tE-Mail\t家庭住址\n");
    while (p1 != NULL)
    {
        fprintf(fp, "%s\t", p1->name);
        fprintf(fp, "%s\t", p1->wm);
        fprintf(fp, "%s\t", p1->tele);
        fprintf(fp, "%s\t", p1->postal);
        fprintf(fp, "%s\t", p1->mail);
        fprintf(fp, "%s\n", p1->home);
        p1 = p1->next;
    }
    printf("已保存联系人!\n");
    fclose(fp);//关闭文件,这个要记得
    fp = NULL;//为file添加休止符
}

void Loadfile(peo* p1)
{
    FILE* fp;
    char file[15];
    fopen_s(&fp, "contact.txt", "r");
    if (fp == NULL)//读取文件
    {
        printf("cannot open this file\n");//无法建立新文件
        return;
    }
    fprintf(fp, "姓名\t性别\t手机号码\t邮编\tE-Mail\t家庭住址\n");
    while (p1 != NULL)
    {
        fscanf(fp, "%s\t", p1->name);
        fscanf(fp, "%s\t", p1->wm);
        fscanf(fp, "%s\t", p1->tele);
        fscanf(fp, "%s\t", p1->postal);
        fscanf(fp, "%s\t", p1->mail);
        fscanf(fp, "%s\n", p1->home);
        p1 = p1->next;
    }
    fclose(fp);//关闭文件,这个要记得
    fp = NULL;
}

//******************排序**********************//
void sort(peo* L)
{
    int flag = 1;
    printf("请输入|>\t1.按姓名\t2.按邮编\n|>");
    if (flag = 1) {
        for (peo* p = L->next; p != NULL; p = p->next)
        {
            for (peo* q = p; q != NULL; q = q->next)
            {
                if (strcmp(p->name, q->name) > 0)
                {
                    //交换数据域
                    peo t = *p;
                    *p = *q;
                    *q = t;
                    //交换指针域 
                    t.next = p->next;
                    p->next = q->next;
                    q->next = t.next;
                }
            }
        }
        printf("排序完成");
    }
    else if(flag == 2)
    {
        for (peo* p = L->next; p != NULL; p = p->next)
        {
            for (peo* q = p; q != NULL; q = q->next)
            {
                if (strcmp(p->postal, q->postal) > 0)
                {
                    //交换数据域
                    peo t = *p;
                    *p = *q;
                    *q = t;
                    //交换指针域 
                    t.next = p->next;
                    p->next = q->next;
                    q->next = t.next;
                }
            }
        }
        printf("排序完成");
    }
    else
    {
        printf("输入错误");
    }
}

int main()
{
    int n;
    menu();
    Loadfile(head);
    while (1)
    {
        printf("请输入(1~9):");
        scanf("%d", &n);

        switch (n)
        {
        case 1:
            input();
            break;
        case 2:
            look(head);//显示刚输入的数据
            break;
        case 3:
            sort(head);
            break;
        case 4:
            deleted();
            break;
        case 5:
            find(head);
            break;
        case 6:
            modify(head);
            break;
        case 7:
            menu();
            break;
        case 8:
            exit(1);//退出系统
            break;
        default:
            printf("输入有误!");
        }
    }
    Savefile(head);
    return 0;
}




没法保存??😓

exit(1)是直接退出程序,其下边的代码将不会执行。
你输入8之后直接就退出了,也就是main函数就结束了,Savefile(head);不会执行
如果想要保存的话,两种方法:
1、把Savefile(head);放到exit(1)上边即可
2、把exit(1)删除即可