m0_75048134 2023-01-27 21:37 采纳率: 100%
浏览 59
已结题

当每次使用功能4 自定义函数delec时,运行总是在循环显示 输入学号和选择功能,是没有进入delect吗,请问哪里有了错误呀

当每次使用功能4 自定义函数delec时,运行总是在循环显示 输入学号和选择功能,是没有进入delect吗

#include<stdio.h>
#include <stdlib.h>
#include<string.h>
#define MAXN 10000
struct student{
        int num,age;
        char name[64];
        char jg[20];
        char sex[20];
        char zy[20];
        char bj[20];
        char xb[20];};
    struct student stu[MAXN];
int change_a(struct student *p,int n,int num,char *a,int chioce);
int input();//普通填写信息 
void select(int option,int num,int n);//选择功能 
void add(int num,int n);//添加信息 
void change(int num,int n);//修改信息
void search(int num,int n);//查找
void delect(int num,int n);//struct student *p*/);//删除信息 

void array(); 
    
int main(void)
{
  int option,num,n;
  struct student stu[MAXN];
    printf("欢迎使用学生学籍管理系统"); 
    n=input();
    
    printf("[1]添加学生信息\n");
    printf("[2]修改学生信息\n");
    printf("[3]查找学生信息\n");
    printf("[4]删除学生信息\n"); 
    printf("[5]打出文件\n");
    printf("[6]退出\n");
    while(1){
        printf("请输入将要应用的功能:\n");
        scanf("%d",&option);
        if(option<1||option>5)
        break;
        printf("请输入所操作学生学号:");
        scanf("%d",&num); 
        select(option,num,n); 
        printf("\n");
        
    } 
    printf("感谢应用本系统"); 
    return 0;
}


int input()      //填写信息 
{
    int n,i;
    printf("请输入操作学生人数"); 
        scanf("%d",&n); 
//    struct student stu[n];
    printf("对应顺序输入以下信息即可\n");
//    printf("姓名\t|学号\t|性别\t|年龄\t|籍贯\t|系别\t|专业班级\n");
 for(i=0;i<n;i++){
            printf("姓名:");
            scanf("%s",stu[i].name);
            printf("学号:");
            scanf("%d",&stu[i].num);
               printf("性别:");
            scanf("%s",stu[i].sex);
            printf("年龄:");
            scanf("%d",&stu[i].age);
               printf("籍贯:");
            scanf("%s",stu[i].jg);    
            printf("系别:");
            scanf("%s",stu[i].xb);
               printf("专业班级:");
            scanf("%s",stu[i].bj);
            
             }
             return n;
}

void select(int option,int num,int n)
{
    switch(option)
    {
        case 1:
            add(num,n);
            break;
        case 2:
            change(num,n);
            break;
        case 3:
            search(num,n);
            break;
        case 4:
            delect(num,n);
        /*case 5:
            file()    */
    }
} 


void add(int num,int n)
{
    int i,j;
    for(i=0;i<n;i++)
    {
        if(num<stu[i].num)
        break;
    }
    for(j=n-1;j>=i;j--)
    {
        stu[j+1]=stu[j];
    }
        stu[i].num=num;
         printf("姓名:");
            scanf("%s",stu[i].name);
           /* printf("学号:");
            scanf("%d",&stu[i].num);*/
               printf("性别:");
            scanf("%s",&stu[i].sex);
            printf("年龄:");
            scanf("%d",&stu[i].age);
               printf("籍贯:");
            scanf("%s",&stu[i].jg);    
            printf("系别:");
            scanf("%s",&stu[i].xb);
               printf("专业班级:");
            scanf("%s",&stu[i].bj);
        n++;
        
}


void change(int num,int n)
{  
    int chioce,age,i,pos;
    char a[20];
    printf("请输入修改学生学号:");
    scanf("%d",&num);
    printf("请输入修改学生信息选项\n");
    printf("1.姓名2.性别3.年龄4.籍贯5.系别6.专业班级\n");
    scanf("%d",&chioce);
    printf("请输入新的修改信息:");
/*    if(chioce==3)
    scanf("%d",&age);
    else*/
    scanf("%s",a);
     
    pos=change_a(stu,n,num,a,chioce);
    
    if(pos==-1)
    printf("无此学号\n");
    else
    {
        printf("修改后的信息如下\n");
        printf("姓名\t|学号\t|性别\t|年龄\t|籍贯\t|系别\t|专业班级\n");
        printf("%s\t%d\t%s\t%d\t%s\t%s\t%s\t",stu[pos].name,stu[pos].num,stu[pos].sex,stu[pos].age,stu[pos].jg,stu[pos].xb,stu[pos].bj);
    }
}



int change_a(struct student *p,int n,int num,char *a,int chioce)
{
    int i,pos;
    for(i=0;i<n;i++,p++)
    {
        if(p->num==num)
        break;
    }
    if(i<n)
    {
        switch(chioce)
        {
             case 1:strcpy(p->name,a);break;
          case 2:strcpy(p->sex,a);break;
          case 3:p->age=atoi(a);break;
             case 4:strcpy(p->jg,a);break;
           case 5:strcpy(p->xb,a);break;
          case 6:strcpy(p->bj,a);break;
        }pos=i;
    }else
    {
        pos=-1;
    }
    return pos;
}

void search(int num,int n)
{
    int i;
    for(i=0;i<n;i++)
    {
     if(num==stu[i].num)
     {
        printf("姓名\t|学号\t|性别\t|年龄\t|籍贯\t|系别\t|专业班级\n");
        printf("%s\t%d\t%s\t%d\t%s\t%s\t%s\t",stu[i].name,stu[i].num,stu[i].sex,stu[i].age,stu[i].jg,stu[i].xb,stu[i].bj);
        break;
     }
     else
     printf("没有此学号"); 
    }

}

void delect(int num,int n)
{
   
    int i; 
//    struct student *p=stu[i];
    for(i=0;i<n;i++)
    {

         if(stu[i].num==num)
       {            stu[i]=stu[i+1];
            n--;
            break; 
         
       }
       if(i>n||i==n)
       printf("查无此号!");
     }
      // if(p->num==num)
        
}
    




     


img

  • 写回答

3条回答 默认 最新

  • 元气少女缘结神 2023-01-27 22:19
    关注

    因为你main中不是一直循环吗,直到输入的功能options是小于0或大于5才跳出while
    while(1)

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 2月4日
  • 已采纳回答 1月27日
  • 创建了问题 1月27日

悬赏问题

  • ¥15 抖音咸鱼付款链接转码支付宝
  • ¥15 ubuntu22.04上安装ursim-3.15.8.106339遇到的问题
  • ¥15 求螺旋焊缝的图像处理
  • ¥15 blast算法(相关搜索:数据库)
  • ¥15 请问有人会紧聚焦相关的matlab知识嘛?
  • ¥15 网络通信安全解决方案
  • ¥50 yalmip+Gurobi
  • ¥20 win10修改放大文本以及缩放与布局后蓝屏无法正常进入桌面
  • ¥15 itunes恢复数据最后一步发生错误
  • ¥15 关于#windows#的问题:2024年5月15日的win11更新后资源管理器没有地址栏了顶部的地址栏和文件搜索都消失了