0402.712 2022-11-28 10:54 采纳率: 100%
浏览 15
已结题

自己写的c语言程序报错

期末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);
    }

}

  • 写回答

4条回答 默认 最新

  • 快乐鹦鹉 2022-11-28 11:24
    关注

    scanf_s("%s", studentidnumber);
    改为
    scanf_s("%s", studentidnumber,15);

    while (A != 1 && 2)改为 if(A!=1 && A!=2)

    #include<stdio.h>
    #include<string.h>
    #define N 120//专业人数
    //该程序面向人群
    int A,B,* a=&A, * b=&B,i;
    char  studentidnumber[15];
    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 && A !=2)
        {
            error(a);
        }//当输入的a不为1或2时系统报错并重新输入
        if (A == 1)
        {
            printf("请输入你的学号:");
            scanf_s("%s", studentidnumber,15);
            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].studentidnumber,student[i].tel);
                break;
            }
        }
        if(i==N)
        {
            printf("Don't have the student!");
            printf("请重新输入你的学号:");
            scanf_s("%s", studentidnumber,15);
            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 && B!=2 && B!=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);
        }
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 12月6日
  • 已采纳回答 11月28日
  • 修改了问题 11月28日
  • 赞助了问题酬金15元 11月28日
  • 展开全部

悬赏问题

  • ¥15 ansys fluent计算闪退
  • ¥15 有关wireshark抓包的问题
  • ¥15 需要写计算过程,不要写代码,求解答,数据都在图上
  • ¥15 向数据表用newid方式插入GUID问题
  • ¥15 multisim电路设计
  • ¥20 用keil,写代码解决两个问题,用库函数
  • ¥50 ID中开关量采样信号通道、以及程序流程的设计
  • ¥15 U-Mamba/nnunetv2固定随机数种子
  • ¥15 vba使用jmail发送邮件正文里面怎么加图片
  • ¥15 vb6.0如何向数据库中添加自动生成的字段数据。