在尝试写个结构体菜单程序,一直报错,请帮我看看

在尝试写个结构体菜单程序,一直报错,帮我看看

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

struct Student {
    int id;
    char name[20];
    char sex[3];
    int chinese;
    int math;
    int english;
};

struct Student students[50];
int peopledata = 0;

void addAStudent() {
    int a = -1;
    do {
        printf("添加学生");
        printf("请依次输入学生的姓名、学号、性别");
        scanf("%s%s%s", students[peopledata].name, students[peopledata].id, students[peopledata].sex);
        printf("输入1继续,输入0结束");
        scanf("%d", a);
    } while (a==0);
}

void glmenu() {
    int menunumber;
    while (1) {
        do {
            printf("\n                       学生管理菜单\n");
            printf("  1  增加学生  ");
            printf("  5   退出系统  ");
            printf("请输入菜单编号");
            scanf("%d", menunumber);

            if (menunumber < 1 || menunumber>5)
                printf("输入有误");
            else
                break;

        } while (1);

        switch (menunumber) {
        case 1: addAStudent(); break;
        case 5: break;
        }
    }
}
void main() {
    int menunumber=0;
    while (1) {
        do {
            printf("\n                       主菜单\n");
            printf("  1  学生管理  ");
            printf("  5   退出系统  ");
            printf("请输入菜单编号");
            scanf("%d", menunumber);

            if (menunumber < 1 || menunumber>5)
                printf("输入有误");
            else
                break;
        } while (1);    
        switch (menunumber) {
        case 1: glmenu(); break;
        case 5: break;
        }
    }
}


img



scanf("%s%s%s", students[peopledata].name, students[peopledata].id, students[peopledata].sex);
你id不是int类型的吗

还有对非字符串数组赋值
scanf("%d", menunumber);都要加&

注意数据类型哦,你结构体中定义的变量类型在输入时也要与之对应,你定义的id变量是int类型,不是char类型,用%d输入,其次,c语言中除了字符串不需要取地址符,其他的所有类型数据的输入都需要取地址符,所以你输入a的值的时候就要加上取地址符

几个输入语句里缺了'&'符号,还有点逻辑上的小问题,修改如下,供参考:

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

struct Student {
    int id;
    char name[20];
    char sex[3];
    int chinese;
    int math;
    int english;
};

struct Student students[50];
int peopledata = 0;

void addAStudent() {
    int a = -1;
    do {
        printf("添加学生\n");
        printf("请依次输入学生的姓名、学号、性别\n");
        scanf("%s%d%s", students[peopledata].name, &students[peopledata].id, students[peopledata].sex);
        peopledata++;
        printf("输入1继续,输入0结束:");
        scanf("%d", &a);
        //scanf("%d", a);
    } while (a != 0);   //(a == 0);
}

void glmenu() {
    int menunumber = -1;
    while (menunumber) {
        do {
            printf("\n                       学生管理菜单\n");
            printf("  1  增加学生  ");
            printf("  5   退出系统  \n");
            printf("请输入菜单编号:");
            scanf("%d", &menunumber);
            //scanf("%d", menunumber);
            if (menunumber < 1 || menunumber>5)
                printf("输入有误\n");
            else
                break;

        } while (1);
        switch (menunumber) {
        case 1: addAStudent(); break;
        case 5: menunumber = 0; break;
        }
    }
}
void main() {
    int menunumber = -1;  //修改
    while (menunumber) {
        do {
            printf("\n                       主菜单\n");
            printf("  1  学生管理  ");
            printf("  5   退出系统  \n");
            printf("请输入菜单编号");
            scanf("%d", &menunumber);
            //scanf("%d", menunumber);
            if (menunumber < 1 || menunumber>5)
                printf("输入有误");
            else
                break;
        } while (1);
        switch (menunumber) {
        case 1: glmenu(); break;
        case 5: menunumber = 0; break;
        }
    }
}