m0_64504242 2022-08-06 16:14 采纳率: 75%
浏览 37
已结题

函数未到末尾 就结束了

问题遇到的现象和发生背景

运行结果与预期不符

问题相关代码,请勿粘贴截图
#include<stdio.h>
#include<stdlib.h>
#include<stdlib.h>
#include<string.h>
#define max 1000

typedef struct{
    char no[6];//学号
    char name[6];//姓名
    char dor[6];//宿舍号
    char bed[6];//床位号
    char tel[6];//电话号码
}student;

typedef struct{
    student *elem0;
    int value;
}dor;

typedef struct{
    dor *elem;
    int length;
}sqlist;

sqlist L;
dor D;

void initsqlist(sqlist &L)     
{//初始化
    L.elem = new dor[max];
    L.length = 0;
}

void initdor(dor &D)     
{//初始化
    D.elem0 = new student[max];
    D.value = 0;
}


void Menu();
void Adddor();
void Save();

void Menu()
{//菜单函数
    printf("\t\t======欢迎使用学生宿舍管理系统======\n\n");
    printf("\t[1]录用学生信息\t");
    printf("\t[2]修改学生信息\n\n");
    printf("\t[3]删除学生信息\t");
    printf("\t[4]输入学号查询学生信息\n\n");
    printf("\t[5]输入姓名查询学生信息\t");
    printf("[6]查询学生总人数\n\n");
    printf("\t[7]进入报修系统\t");
    printf("\t[8]查看需要报修项目\n\n");
    printf("\t[9]添加未返校学生\t");
    printf("[10]查询未返校学生\n\n");
    printf("\t[11]查看所有学生信息\t");
    printf("[0]保存并退出系统\n\n");
    printf("\t\t请输入您的选择:");
}

void Adddor()
{//录用宿舍信息
    printf("\t\t======欢迎使用学生宿舍管理系统======\n");
    int i=L.length;
    int j=0;
    printf("\t=====请录用%d号宿舍学生信息(一个宿舍只能有6人)=====\n",i);
    for(j;j<6;j++){
        printf("请输入第%d位学生信息\n",j+1);
        printf("\t请输入学号:");
        scanf("%s",L.elem[i].elem0[j].no);
        printf("\t请输入姓名:");
        scanf("%s",L.elem[i].elem0[j].name);
        printf("\t请输入宿舍号:");
        scanf("%s",L.elem[i].elem0[j].dor);
        printf("\t请输入床位号:");
        scanf("%s",L.elem[i].elem0[j].bed);
        printf("\t请输入电话号码:");
        scanf("%s",L.elem[i].elem0[j].tel);
        printf("\t录用成功!");
    }
    L.length++;
    Save();
    system("cls");
}

void Save()
{
    FILE *fp;
    int i;
    int j=L.length;
    if((fp=fopen("Student.txt","w"))==NULL)
    {
        printf("\t不能打开此文件\n");
        exit(0);
    }
    fprintf(fp,"==========%d号宿舍学生信息==========\n",L.length);
    fprintf(fp,"学号\t姓名\t\t宿舍号\t床位号\t电话号码\n");
    for(i=0;i<6;i++)
    {
        fprintf(fp,"%s\t%s\t%s\t\t%s\t\t%s\n",L.elem[j].elem0[i].no,\
            L.elem[j].elem0[i].name,L.elem[j].elem0[i].dor,\
            L.elem[j].elem0[i].bed,L.elem[j].elem0[i].tel);
    }
    fclose(fp);
}



void main()
{
    int s;
    initsqlist(L);
    initdor(D);
    while(1){
        Menu();
        scanf("%d",&s);
        switch(s){
        case 0:Save();return;
        case 1:Adddor();break;
        /*case 2:Modifystudent();break;
        case 3:Deletestudent();break;
        case 4:Findstudentno();break;
        case 5:Findstudentname();break;
        case 6:Numberstudent();break;
        case 7:Repairsystem();break;
        case 8:Findrepair();break;
        case 9:Addnotback();break;
        case 10:Findnotback();break;
        case 11:Showstudent();break;*/
        }
    }
}

运行结果及报错内容

img

我想要达到的结果

输入学号后就结束了 ,我希望将函数运行完

  • 写回答

2条回答 默认 最新

  • qzjhjxj 2022-08-06 21:07
    关注

    修改处见注释,供参考:

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #define max 1000
    
    typedef struct{
        char no[6];//学号
        char name[6];//姓名
        char dor[6];//宿舍号
        char bed[6];//床位号
        char tel[6];//电话号码
    }student;
    
    typedef struct{
        student *elem0;
        int value;
    }dor;
    
    typedef struct{
        dor *elem;
        int length;
    }sqlist;
    
    sqlist L;
    //dor D;  修改
    
    void initsqlist(sqlist &L)
    {//初始化
        L.elem = new dor[max];
        L.length = 0;
    }
     
    void initdor(dor &D)
    {//初始化
        D.elem0 = new student[6]; //D.elem0 = new student[max]; 修改
        D.value = 0;
    }
     
    
    void Menu();
    void Adddor();
    void Save();
     
    void Menu()
    {//菜单函数
        printf("\t\t======欢迎使用学生宿舍管理系统======\n\n");
        printf("\t[1]录用学生信息\t");
        printf("\t[2]修改学生信息\n\n");
        printf("\t[3]删除学生信息\t");
        printf("\t[4]输入学号查询学生信息\n\n");
        printf("\t[5]输入姓名查询学生信息\t");
        printf("[6]查询学生总人数\n\n");
        printf("\t[7]进入报修系统\t");
        printf("\t[8]查看需要报修项目\n\n");
        printf("\t[9]添加未返校学生\t");
        printf("[10]查询未返校学生\n\n");
        printf("\t[11]查看所有学生信息\t");
        printf("[0]保存并退出系统\n\n");
        printf("\t\t请输入您的选择:");
    }
     
    void Adddor()
    {//录用宿舍信息
        printf("\t\t======欢迎使用学生宿舍管理系统======\n");
        int i=L.length;
        int j=0;
        initdor(L.elem[i]); //修改
        printf("\t=====请录用%d号宿舍学生信息(一个宿舍只能有6人)=====\n",i+1);
        for(j;j<6;j++){
            printf("请输入第%d位学生信息\n",j+1);
            printf("\t请输入学号:");
            scanf("%s",L.elem[i].elem0[j].no);
            printf("\t请输入姓名:");
            scanf("%s",L.elem[i].elem0[j].name);
            printf("\t请输入宿舍号:");
            scanf("%s",L.elem[i].elem0[j].dor);
            printf("\t请输入床位号:");
            scanf("%s",L.elem[i].elem0[j].bed);
            printf("\t请输入电话号码:");
            scanf("%s",L.elem[i].elem0[j].tel);
            printf("\t录用成功!");
        }
        L.length++;
        Save();
        system("cls");
    }
     
    void Save()
    {
        FILE *fp;
        int  i;
        int  j;   //=L.length;  修改
        if((fp=fopen("Student.txt","w"))==NULL)
        {
            printf("\t不能打开此文件\n");
            exit(0);
        }
        for(j=0;j<L.length;j++)                  //修改
        {
           fprintf(fp,"==========%d号宿舍学生信息==========\n",j+1); //修改
           fprintf(fp,"学号\t姓名\t\t宿舍号\t床位号\t电话号码\n");   //修改
           for(i=0;i<6;i++)
            {
                fprintf(fp,"%s\t%s\t%s\t\t%s\t\t%s\n",L.elem[j].elem0[i].no,\
                       L.elem[j].elem0[i].name,L.elem[j].elem0[i].dor,\
                       L.elem[j].elem0[i].bed,L.elem[j].elem0[i].tel);
            }
        }
        fclose(fp);
    }
    
    void main()
    {
        int s;
        initsqlist(L);
        //initdor(D);  修改
        while(1){
            Menu();
            scanf("%d",&s);
            switch(s){
            case 0:Save();return;
            case 1:Adddor();break;
            /*case 2:Modifystudent();break;
            case 3:Deletestudent();break;
            case 4:Findstudentno();break;
            case 5:Findstudentname();break;
            case 6:Numberstudent();break;
            case 7:Repairsystem();break;
            case 8:Findrepair();break;
            case 9:Addnotback();break;
            case 10:Findnotback();break;
            case 11:Showstudent();break;*/
            }
        }
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 8月15日
  • 已采纳回答 8月7日
  • 创建了问题 8月6日

悬赏问题

  • ¥15 Centos7 / PETGEM
  • ¥15 csmar数据进行spss描述性统计分析
  • ¥15 各位请问平行检验趋势图这样要怎么调整?说标准差差异太大了
  • ¥15 delphi webbrowser组件网页下拉菜单自动选择问题
  • ¥15 wpf界面一直接收PLC给过来的信号,导致UI界面操作起来会卡顿
  • ¥15 init i2c:2 freq:100000[MAIXPY]: find ov2640[MAIXPY]: find ov sensor是main文件哪里有问题吗
  • ¥15 运动想象脑电信号数据集.vhdr
  • ¥15 三因素重复测量数据R语句编写,不存在交互作用
  • ¥15 微信会员卡等级和折扣规则
  • ¥15 微信公众平台自制会员卡可以通过收款码收款码收款进行自动积分吗