函数未到末尾 就结束了

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

运行结果与预期不符

问题相关代码,请勿粘贴截图
#include
#include
#include
#include
#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

我想要达到的结果

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

修改处见注释,供参考:

#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;*/
        }
    }
}

typedef struct{
    student elem0[6];
    int value;
}dor;
 
typedef struct{
    dor elem[6];
    int length;
}sqlist;

指针不能直接赋值