有关与链表的运动会管理系统部分代码的疑问


#include
#include
typedef struct Node{

    char major[50];//专业 
    int grade;//年级 
    char name[50];//姓名 
    char sex[10];//性别 
    char item;//项目 
    int score;//成绩 
    //char Field[5][10] = {"跳高", "跳远", "铅球", "实心球", "立定跳远"};
    //char Track[8][20] = {"60米", "100米", "400米", "800米", "1500米", "4*100米接力", "4*400米接力", "异程接力"}; 
    char college[11][20] = {"工学院", "理学院", "文学院", "法学院", "商学院", "医学院", "长江新闻与传播学院", "长江艺术与设计学院", "开放学院", "马克思主义学院", "国际学院"};
    int sum;//总和 
    struct Node*next;//指针域 
}node;

node List;//链表
 
void menu();
void show();//发布 
void addInfo();//录入 
void insertInfo(node*L,node e);//插入 功能 

int main()    {
        int choice=0;
        menu() ;
        scanf("%d",&choice);
        switch(choice){
            case 1:
            //发布运动会信息
            show() ;
                break;
            case 2:
            //录入运动会信息 
            addInfo();
                break;
        }
    
        return 0; 
    }

    void menu() {
    printf("\t\t\t===================运动会项目管理系统==================\n");
    printf("\t\t\t*                                                       *\n");
    printf("\t\t\t*          1>. 运动会项目信息公告                       *\n");
    printf("\t\t\t*          2>. 录入运动会项目信息                       *\n");
    printf("\t\t\t=========================================================\n");
    printf("请输入对应功能键") ;
}


    void show(){
        printf("\t\t\t公告\n");
        printf("全校师生:\n\t我校将在田径场举办运动会,期望大家踊跃报名参加。\n");
        printf("  现有项目:\n");
        printf("\t************************************************\n") ;
        char *Field[] = {"跳高", "跳远", "铅球", "实心球", "立定跳远"};
        int i;
        for(i=0;i<5;i++){
                printf("\t*\t田赛: %s\t\t\t\t*\n",Field[i]);
        }
        printf("\t************************************************\n") ;
        char *Track[] = {"60米", "100米", "400米", "800米", "1500米", "4*100米", "4*400米", "异程接力"}; 
        int j;
        for(j=0;j<8;j++){
                printf("\t*\t径赛: %s\t\t\t\t*\n",Track[j]);
        }
        printf("\t************************************************\n") ;
        
    

         
    }
    void addInfo(){
        printf("录入运动会信息\n");
        node st;
        printf("请输入参赛学生相关信息\n") ;
        printf("学院:");
        scanf("%s",st.college) ;
        printf("年级:");
        scanf("%d",st.grade) ;
        printf("专业:");
        scanf("%s",st.major) ;
        printf("姓名:");
        scanf("%s",st.name);
        printf("性别:");
        scanf("%s",st.sex) ;
        printf("项目:") ;
        scanf("%s",st.item);
        printf("成绩:");
        scanf("%d",st.score);
        insertInfo(&List,st);
        
        
    }
    //头插法 
    void insertInfo(node *L,node e) {
        node *h=L;
        node *s=(node *)malloc(sizeof(node));
        *s=e;
        s->next=h->next;
        h->next=s;
    }

可以帮忙看一下,为什么我的代码跑起来,到了专业时,输入不了文字,就停止了,不继续跑了,想了一个晚上,没有想明白,期望能有人帮忙解疑,Thanks♪(・ω・)ノ

img

printf("年级:");
scanf("%d",st.grade) ;
应该是
scanf("%d",&st.grade) ;

修改完善如下,供参考:

#include <stdio.h>
#include <stdlib.h>
typedef struct Node {

    char major[50];//专业 
    int  grade;    //年级 
    char name[50]; //姓名 
    char sex[10]; //性别 
    char item[20];//项目   //char item; 修改
    int  score;   //成绩 
    //char Field[5][10] = {"跳高", "跳远", "铅球", "实心球", "立定跳远"};
    //char Track[8][20] = {"60米", "100米", "400米", "800米", "1500米", "4*100米接力", "4*400米接力", "异程接力"}; 
    char college[32];     // 修改
    //char college[11][20] = { "工学院", "理学院", "文学院", "法学院", "商学院", "医学院","长江新闻与传播学院",
    //                         "长江艺术与设计学院", "开放学院", "马克思主义学院", "国际学院" };
    int sum;//总和 
    struct Node* next;//指针域 
}node;


node* List = NULL;//修改

void menu();
void show();//发布 
void addInfo();//录入 
void insertInfo(node** L, node e);//  修改 
void printInfo(node* L);          //  修改

int main() {
    int choice = 0;
    while (1) {
        menu();
        scanf("%d", &choice);
        switch (choice) {
        case 1:
            //发布运动会信息
            show();
            break;
        case 2:
            //录入运动会信息 
            addInfo();
            break;
        case 3:
            //显示所有信息
            printInfo(List);
            break;
        default: break;
        }
        if (!choice) break; //输入 0 ,退出系统
    }
    return 0;
}

void menu() {
    printf("\t\t\t===================运动会项目管理系统==================\n");
    printf("\t\t\t*                                                       *\n");
    printf("\t\t\t*          1>. 运动会项目信息公告                       *\n");
    printf("\t\t\t*          2>. 录入运动会项目信息                       *\n");
    printf("\t\t\t*          3>. 显示所有运动会信息                       *\n");
    printf("\t\t\t=========================================================\n");
    printf("请输入对应功能键");
}

void show() {
    printf("\t\t\t公告\n");
    printf("全校师生:\n\t我校将在田径场举办运动会,期望大家踊跃报名参加。\n");
    printf("  现有项目:\n");
    printf("\t************************************************\n");
    char* Field[] = { "跳高", "跳远", "铅球", "实心球", "立定跳远" };
    int i;
    for (i = 0; i < 5; i++) {
        printf("\t*\t田赛: %s\t\t\t\t*\n", Field[i]);
    }
    printf("\t************************************************\n");
    char* Track[] = { "60米", "100米", "400米", "800米", "1500米", "4*100米", "4*400米", "异程接力" };
    int j;
    for (j = 0; j < 8; j++) {
        printf("\t*\t径赛: %s\t\t\t\t*\n", Track[j]);
    }
    printf("\t************************************************\n");
}

void addInfo() {
    printf("录入运动会信息\n");
    node st;
    printf("请输入参赛学生相关信息\n");
    printf("学院:");
    scanf("%s", st.college);
    printf("年级:");
    scanf("%d", &st.grade);  //scanf("%d", st.grade);
    printf("专业:");
    scanf("%s", st.major);
    printf("姓名:");
    scanf("%s", st.name);
    printf("性别:");
    scanf("%s", st.sex);
    printf("项目:");
    scanf("%s", st.item);
    printf("成绩:");
    scanf("%d", &st.score);  //scanf("%d", st.score);
    insertInfo(&List, st);
}
//头插法 
void insertInfo(node** L, node e) {
    //node* h = (*L);
    node* s = (node*)malloc(sizeof(node));
    s->next = NULL;
    *s = e;
    s->next = (*L);  //s->next = h->next;
    (*L) = s;        //h->next = s;
}

void printInfo(node* L)
{
    node* p = L;
    while (p) {
        printf("%s %d %s %s %s %s %d\n", p->college, p->grade, p->major, p->name, p->sex, p->item, p->score);
        p = p->next;
    }
}

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^