期末c语言大作业,写了一个核酸信息查询系统,如下,但总是不能达到自己想要的效果。例如,第一步输入1后再输入学号会报错,输入2会直接跳到error。是因为studentidnumber这个变量在一个函数中被附值后不能到其他函数中去吗?
请问一下有哪些错误?
#include<stdio.h>
#include<string.h>
#define N 120//专业人数
//该程序面向人群
int A,B,* a=&A, * b=&B,i;
char * studentidnumber;
struct student {
char name[10];//学生姓名
char sex[10];//学生性别
char IDnumber[20];//身份证号码
char studentidnumber[15];//学生学号
char tel[11];//学生手机号码
}student[120] = { { "张三","女","6546468464846","2022131001","46154531" }, {"李四","男","486546765445","2022131002","1615464654"},
{"李青","男","4646878745155","2022131003","1546854654"} };
//学生基本信息
struct Nucleic_acid_information {
int year;
int month;
int day;
int epona;//核酸有效期限
int nat;//接种疫苗次数
}NA[120] = { {2022,12,9,72,3},{2022,12,10,48,2},{2022,12,9,72,3},{2022,12,9,72,2},{2022,12,11,48,3}, {2022,12,9,72,3} };
//核酸检测信息
struct vehicle_information
{
char vehicle[30];
char start[30];//起始站
char end[30];//终点站
char start_time[30];//出发时间
}vehicle[120] = { {"火车","太原南站","汝州站","2022.12.11"},{"飞机","武宿机场","合肥站","2022.12.11"} };
//回家车辆信息
void detection(char * studentidnumber);
void choice(int * b);
void screen();
int error(int * a);
void end();
void menu();//调用函数声明
void choice1(int * a);
int main()
{
menu();
printf("请选择你的下一个操作(请输入1或2):");
scanf_s("%d",a);//第一个菜单选项操作
choice1(a);
return 0;
}
void choice1(int * a)
{
while (A != 1 && 2)
{
error(a);
}//当输入的a不为1或2时系统报错并重新输入
if (A == 1)
{
printf("请输入你的学号:");
scanf_s("%s", studentidnumber);
detection(studentidnumber);
screen();
printf("请选择你的下一个操作(请输入1、2或3):");
scanf_s("%d", b);
choice(b);
}//选择选项1时下一个菜单操作
else
end();//选择选项2时的结束界面
}
void detection(char * studentidnumber)
{
for(i=0;i<N;i++)
if (strcmp ( studentidnumber, student[i].studentidnumber)==0)
printf("姓名:%s\n性别:%s\n身份证号码:%s\n学号:%s\n手机号码:%s\n", student[i].name, student[i].sex, student[i].IDnumber, student[i].tel);
while(strcmp(studentidnumber, student[i].studentidnumber)!=0)
{
printf("Don't have the student!");
printf("请重新输入你的学号:");
scanf_s("%s", studentidnumber);
detection(studentidnumber);
}
}
void screen()
{
printf("***************************************************** \n");
printf("* 1.查询该学生核酸信息 \n");
printf("* 2.查询该学生回家车辆信息 \n");
printf("* 3.返回主菜单 \n");
printf("*****************************************************\n");
printf("\n\n\n\n");
}
void menu()
{
printf("***************************************************** \n");
printf("* 1.进入查询界面 \n");
printf("* 2.退出查询 \n");
printf("*****************************************************\n");
printf("\n\n\n\n");
}
void end()
{
printf("***************************************************** \n");
printf("* \n");
printf("* 谢谢你的使用! \n");
printf("* \n");
printf("*****************************************************\n");
printf("\n\n\n\n");
}
int error(int * a)
{
printf("***************************************************** \n");
printf("* \n");
printf("* 输入错误! \n");
printf("* \n");
printf("*****************************************************\n");
printf("\n\n\n\n");
printf("请选择你的下一个操作(请输入1或2):");
scanf_s("%d", a);
return (A);
}
void choice(int * b)
{
while (B != 1 && 2 && 3)
{
printf("***************************************************** \n");
printf("* \n");
printf("* 输入错误! \n");
printf("* \n");
printf("*****************************************************\n");
printf("\n\n\n\n");
printf("请选择你的下一个操作(请输入1、2或3):");
scanf_s("%d", b);
}
if (B == 1);
printf("接种日期:%d-%d-%d\n核酸有效期限:%d\n接种疫苗次数:%d\n", NA[i].year, NA[i].month, NA[i].day, NA[i].epona, NA[i].nat);
if (B == 2);
printf("交通工具:%s\n起始站:%s\n终点站:%s\n,出发时间:%s\n", vehicle[i].vehicle, vehicle[i].start, vehicle[i].end, vehicle[i].start_time);
if (B == 3);
menu();
{
printf("请选择你的下一个操作(请输入1或2):");
scanf_s("%d", a);//第一个菜单选项操作
choice1(a);
}
}