在尝试写个结构体菜单程序,一直报错,帮我看看
#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;
}
}
}
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;
}
}
}