weixin_62355089 2022-12-27 09:40 采纳率: 44.4%
浏览 38
已结题

用单链表实现学生管理类

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

用单链表实现学生管理系统

遇到的现象和发生背景,请写出第一个错误信息

运行没有交互,直接结束了

img

用代码块功能插入代码,请勿粘贴截图。 不用代码块回答率下降 50%
#include<stdio.h> 
#include<string.h>
#include<stdlib.h>
#define MAXSIZE 100

 
typedef struct{
    char no[20];       // 学号 
    char name[20];    // 姓名 
    int M ;        // 数学成绩 
    int E;        //英语成绩 
    int Ch;         //语文成绩 
    int P  ;       //物理成绩 
    int Ce ;      //化学成绩 
}Student;

typedef struct{
    Student elem[MAXSIZE]; //线性表占用的数组空间 
    int last;    //最后一个元素的下标
}SeqList;



int InsList(SeqList *L,int i,Student e)   //插入学生信息 
{    /*在L中第i个位置之前插入新的数据元素e,L的长度加1*/ 
    int k;
    if(i<1||(i>L->last+2))
    {
        return 0;
    }
    for(k=L->last;k>=i-1;k--) //元素向后移动位置
    L->elem[k+1]=L->elem[k];
    L->elem[i-1]=e;
    L->last++;
    return 1;
}

int DelList(SeqList *L,int i) //删除指定位置学生记录 
{      
    int k;
    if(i<1||i>L->last+1)
    return 0;
    for(k=i;k<=L->last;k++) 
    {
        L->elem[k-1]=L->elem[k]; //将后面元素依次前移 
    }
    L->last--;
    return 1;
}

int main()
{
    int i,x,a,temp,select,sum=0,c;
    SeqList L;
    Student m,e;
    printf("********************************************************************\n"); 
    printf("*      1. 根据指定学生个数,逐个输入学生信息;                      *\n");
    printf("*      2. 逐个显示学生表中所有学生的相关信息;                     *\n");
    printf("*      3. 给定一个学生信息,插入到表中指定的位置;                 *\n");
    printf("*      4. 删除指定位置的学生记录;                                 *\n");
    printf("*      5. 退出。                                                   *\n");
    printf("********************************************************************\n");
    printf("\n"); 
    while(select)
    {
        printf("请选择你要操作的选项:");
        scanf("%d",&select);
        printf("\n");
        switch(select)
        {
            case 1:
                
                printf("请输入学生的数量:"); 
                scanf("%d",&x);
                printf("\n");
                sum=x; 
                for(i=0;i<x;i++)
                {
                    printf("第%d位学生信息\n",i+1);
                    printf("\n");
                    printf("学号:");
                    scanf("%s",L.elem[i].no);
                    printf("姓名:");
                    scanf("%s",L.elem[i].name);
                    printf("数学成绩:");
                    scanf("%d",&L.elem[i].M);
                    printf("语文成绩:");
                    scanf("%d",&L.elem[i].Ch);
                    printf("英语成绩:");
                    scanf("%d",&L.elem[i].E);
                    printf("物理成绩:");
                    scanf("%d",&L.elem[i].P);
                    printf("化学成绩:");
                    scanf("%d",&L.elem[i].Ce);
                } 
                L.last=x;
                printf("\n");
                break;
                
            case 2:
                
                printf("所有学生的相关信息为:\n\n");
                for(i=0;i<L.last;i++)
                {
                    printf("学号:%s 姓名:%s 数学成绩:%d 语文成绩:%d 英语成绩:%d 物理成绩:%d 化学成绩:%d\n\n\n\n\n\n",L.elem[i].no,L.elem[i].name,L.elem[i].M,L.elem[i].Ch,L.elem[i].E,L.elem[i].P,L.elem[i].Ce);
                }
                printf("\n");
                break;

            case 3:
                
                printf("请输入你要插入的位置:");
                scanf("%d",&a);
                printf("请输入插入学生信息:\n");
                printf("学号:");
                scanf("%s",m.no);
                printf("姓名:");
                scanf("%s",m.name);
                printf("数学成绩:");                                                                                
                scanf("%d",&m.M);
                printf("语文成绩:");
                scanf("%d",&m.Ch);
                printf("英语成绩:");
                scanf("%d",&m.E);
                printf("物理成绩:");
                scanf("%d",&m.P);
                printf("化学成绩:");
                scanf("%d",&m.Ce);
                if(InsList(&L,a,m))
                {
                    sum++;
                    printf("插入成功!\n\n"); 
                }
                else
                    printf("插入失败!\n\n");
                break;
                
            case 4:
                
                printf("请输入要删除学生的位置:");
                scanf("%d",&c);
                if(DelList(&L,c))
                {
                    sum--;
                    printf("删除成功!\n\n");
                }
                else
                    printf("删除失败!\n\n");
                break;

            case 5:
                {
                    printf("\n退出系统成功!请按任意键结束!\n");
                    exit(0);
                }
                break;         
        } 
    }
    return 0;
} 


运行结果及详细报错内容
我的解答思路和尝试过的方法,不写自己思路的,回答率下降 60%
我想要达到的结果,如果你需要快速回答,请尝试 “付费悬赏”
  • 写回答

4条回答 默认 最新

  • CSDN专家-sinJack 2022-12-27 09:56
    关注
    int select;
    while(select)
    

    select 没有初始化,是一个随机值,如果产生的随机值是0,那么就不会进入循环了。这里应该要用死循环的,修改如下:

    while(select)
    改为:
    while(1)
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 1月5日
  • 已采纳回答 12月28日
  • 创建了问题 12月27日

悬赏问题

  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测
  • ¥15 ETLCloud 处理json多层级问题
  • ¥15 matlab中使用gurobi时报错
  • ¥15 这个主板怎么能扩出一两个sata口
  • ¥15 不是,这到底错哪儿了😭
  • ¥15 2020长安杯与连接网探
  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥15 可见光定位matlab仿真