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

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

#include
#include 
#include
#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;ireturn 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;iif(numfor(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;iif(p->num==num)
        break;
    }
    if(icase 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;iif(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;iif(stu[i].num==num)
       {            stu[i]=stu[i+1];
            n--;
            break; 
         
       }
       if(i>n||i==n)
       printf("查无此号!");
     }
      // if(p->num==num)
        
}
    




     


img

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

修改如下,改动处见注释,供参考:

#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();//普通填写信息
int  Select(int option,int num,int n);//选择功能 void select(int option,int num,int n); 修改
int  add(int num,int n);//添加信息  void add(int num,int n);    修改
void change(int num,int n);//修改信息
void search(int num,int n);//查找
int  delect(int num,int n);//struct student *p*/);//删除信息  void delect(int num,int n);修改
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); 
        n = 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;
}
 
int Select(int option,int num,int n) //void select(int option,int num,int n)修改
{
    switch(option)
    {
        case 1:
            n = add(num,n);//修改
            break;
        case 2:
            change(num,n);
            break;
        case 3:
            search(num,n);
            break;
        case 4:
            n = delect(num,n);//修改
        /*case 5:
            file()    */
    }
    return n;          //修改
} 
 

int add(int num,int n) //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++;
    return 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;
     }
    } //修改
    if (i >= n)  //else        修改
        printf("没有此学号");
}
 
int delect(int num,int n)  //void delect(int num,int n) 修改
{
   
    int i,j,flg=0;  //修改
//    struct student *p=stu[i];
    for(i=0;i<n;i++)
    {
        if(stu[i].num == num)
        {
            for (j = i; j < n - 1;j++) //修改
                stu[j] = stu[j+1];     //修改
            n--;
            flg = 1;
            break;
        }
    } //修改
    if (!flg)  //if(i>n||i==n) 修改
       printf("查无此号!");
    return n;                 //修改
      // if(p->num==num)
}

img