dev编译运行之后插入数据失败

能正常运行程序
但是插入链表数据直接就退出了
输入数据之后就会直接按任意键退出

img

#include
#include
#include
#include

struct student{
    int num;
    char name[20];
    char sex[20];
    char age[20];
    char project[20];
    char clas[20];
    char date[20];
    int time;
    int money; 
};

struct Node{
    struct student data;
    struct Node *next;
};
struct Node* list;                                                        //创建表头 

struct Node*createHead(){                                                //创建头结点 
    struct Node*headNode = (struct Node*)malloc(sizeof(struct Node));
    assert(headNode);
    headNode->next = NULL;
    return headNode;
}

struct Node* createNode(struct student data){                            //创建结点 
    struct Node* newNode=(struct Node*)malloc(sizeof(struct Node));
    assert(newNode);
    newNode->data = data;
    newNode->next = NULL;
    return newNode;
}

void insert(struct Node* headNode,struct student data){                    //插入链表 
    struct Node* newNode = createNode(data);
    newNode->next = headNode->next;
    headNode->next = newNode;
}

void del(struct Node* headNode,const char*name){                        //删除信息 
    struct Node*preNode = headNode;
    struct Node*curNode = headNode->next;
    while(curNode != NULL && strcmp(curNode->data.name,name)){
        preNode = curNode;
        curNode = preNode->next;
    }
    if(curNode == NULL){
        printf("删除失败!未找到指定数据!\n"); 
    }
    else{
        preNode->next = curNode->next;
        free(curNode);
    }
}

struct Node* search(struct Node*headNode,const char*name){                //查找学生信息 
    struct Node*pmove = headNode->next;
    while(pmove != NULL && strcmp(pmove->data.name,name)){
        pmove = pmove->next;
    }
    return pmove;
}

struct Node* printproject(struct Node*headNode,const char*project){        //打印项目信息 
    struct Node*pmove = headNode->next;
    while(pmove != NULL && strcmp(pmove->data.project,project)){
        pmove = pmove->next;
    }
    return pmove;
}

struct Node* printclas(struct Node*headNode,const char*clas){            //打印班级信息 
    struct Node*pmove = headNode->next;
    while(pmove != NULL && strcmp(pmove->data.clas,clas)){
        pmove = pmove->next;
    }
    return pmove;
}
void menu(){                                                            //制作菜单 
    printf("* * * * *幼儿园培训班学生信息管理系统* * * * *\n");
    printf("\t\t1.录入小朋友信息\n");
    printf("\t\t2.查询小朋友信息\n");
    printf("\t\t3.删除小朋友信息\n");
    printf("\t\t4.查询项目信息\n");
    printf("\t\t5.查询班级信息\n");
    printf("\t\t0.退出系统\n");
    printf("* * * * * * * * * * * * * * * * * * * * * * * *\n");
    printf("请输入0~5以实现对应操作:");
}

void key(){
    int userkey=0;
    struct student temp;                                                //接收用户输入
    struct Node*result; 
    scanf("%d", &userkey);
    switch(userkey){
    case 0:
        printf("退出系统\n");
        system("pause");
        exit(0);
        break; 
    case 1:
        printf("录入小朋友信息\n");
        printf("请输入小朋友信息(编号,姓名,性别,年龄,项目,班级,缴费日期,缴费年限):");
        scanf("%d%s%s%s%s%s%s%d",
            &temp.num,
            temp.name,20,
            temp.sex,20,
            temp.age,20,
            temp.project,20,
            temp.clas,20,
            temp.date,20,
            &temp.time);
        insert(list,temp);
        break;
    case 2:
        printf("查询小朋友信息\n");
        printf("请输入要查找小朋友的姓名:");
        scanf("%s",temp.name,20);
        result = search(list,temp.name);
        if(result == NULL){
            printf("未找到小朋友!\n");
        }
        else{
            printf("编号\t姓名\t性别\t年龄\t项目\t班级\t缴费日期\t缴费年限\n");
            printf("%d\t%s\t%s\t%s\t%s\t%s\t%s\t%d\n",
                result->data.num,
                result->data.name,
                result->data.sex,
                result->data.age,
                result->data.project,
                result->data.clas,
                result->data.date,
                result->data.time);
        }
        break;
    case 3:
        printf("删除小朋友信息\n");
        printf("请输入要删除的小朋友姓名:"); 
        scanf("%s",temp.name,20);
        result = search(list,temp.name);
        if(result == NULL){
            printf("删除失败!未找到小朋友!\n");
        }
        else{
            del(list,temp.name);
            temp.money = temp.time*1000;
            printf("成功删除小朋友信息,其退费为%d");
        }
        break;
    case 4:
        printf("查询项目信息\n");
        printf("请输入要查询的项目:");
        scanf("%s",temp.project,20);
        result = printproject(list,temp.project);
        if(result == NULL){
            printf("该项目无小朋友!\n");
        }
        else{
            printf("编号\t姓名\t性别\t年龄\t项目\t班级\t缴费日期\t缴费年限\n");
            printf("%s\t%s\t%s\t%s\t%s\t%s\t%s\t%d\n",
                result->data.num,
                result->data.name,
                result->data.sex,
                result->data.age,
                result->data.project,
                result->data.clas,
                result->data.date,
                result->data.time);
        }
        break;
    case 5:
        printf("查询班级信息\n");
        printf("请输入要查询的班级:");
        scanf("%s",temp.clas,20);
        result = printclas(list,temp.clas);
        if(result == NULL){
            printf("该班级无小朋友!\n");
        }
        else{
            printf("编号\t姓名\t性别\t年龄\t项目\t班级\t缴费日期\t缴费年限\n");
            printf("%s\t%s\t%s\t%s\t%s\t%s\t%s\t%d\n",
                result->data.num,
                result->data.name,
                result->data.sex,
                result->data.age,
                result->data.project,
                result->data.clas,
                result->data.date,
                result->data.time);
        }
        break;
    default:
        printf("输入错误,请输入0~5以实现对应操作\n");
        break;
    }
}

int main(){
    list = createHead();
    while(1){
        menu();
        key();
        system("pause");                                                //按任意键继续 
        system("cls");                                                    //清屏 
    }
    return 0;
}

用过%*c也不管用

程序崩溃了
110行,你这输入参数,应该用scanf_s函数啊。