我的switch选项想修改名字的时候不运行了sos

当我想要修改姓名的时候,程序不往下运行了sos
#include 
    struct student{
        int num,age;
        char name[10000];
        char jg;
        char sex;
        char zy;
        char bj;
        char xb;};
int change_a(struct student *p,int n,int num,char a,int chioce);
int main(){
    int n,num,chioce,age,i,pos;
    char a;
    printf("请输入操作学生人数"); 
        scanf("%d",&n); 
        struct student stu[n];
    printf("对应顺序输入以下信息即可\n");
 for(i=0;iprintf("姓名:");
            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);
 }
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("修改后的信息如下");
        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(iswitch(chioce)
        {
             case 1:p->name[i]=a;break;
          case 2:p->sex=a;break;
             case 4:p->jg=a;break;
           case 5:p->xb;break;
          case 6:p->bj;break;
        }pos=i;
    }else{
        pos=-1;
    }
    return pos;
}
     
![img](https://img-mid.csdnimg.cn/release/static/image/mid/ask/260748282376161.png "#left")



可以帮帮我吗谢谢!

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

#include <stdio.h>
#include <stdlib.h> //修改
#include <string.h> //修改
struct student {
    int  num, age;
    char name[32];  //修改
    char jg[16];    //修改
    char sex[10];   //修改
    //char zy;      //修改
    char bj[32];    //修改
    char xb[16];    //修改
}stu[100];          //修改
int change_a(struct student* p, int n, int num, char *a, int chioce); //修改
int main() {
    int n, num, chioce, age, i, pos;
    char a[32];    //修改
    printf("请输入操作学生人数");
    scanf("%d", &n);
    //struct student stu[n];    //修改
    printf("对应顺序输入以下信息即可\n");
    for (i = 0; i < n; i++)
    {
        printf("姓名:");
        scanf("%s", stu[i].name);
        getchar(); //修改
        printf("学号:");
        scanf("%d", &stu[i].num);
        getchar(); //修改
        printf("性别:");
        scanf("%s", stu[i].sex); //scanf("%s", &stu[i].sex);//修改
        getchar(); //修改
        printf("年龄:");
        scanf("%d", &stu[i].age);
        getchar(); //修改
        printf("籍贯:");
        scanf("%s", stu[i].jg); //scanf("%s", &stu[i].jg);//修改
        getchar(); //修改
        printf("系别:");
        scanf("%s", stu[i].xb); //scanf("%s", &stu[i].xb);//修改
        getchar(); //修改
        printf("专业班级:");
        scanf("%s", stu[i].bj); //scanf("%s", &stu[i].bj);//修改
        getchar(); //修改
    }
    printf("请输入修改学生学号:");
    scanf("%d", &num);
    printf("请输入修改学生信息选项\n");
    printf("1.姓名2.性别3.年龄4.籍贯5.系别6.专业班级\n");
    scanf("%d", &chioce); //scanf("%d", chioce); 修改
    printf("请输入新的修改信息:");
    //if (chioce == 3)       //修改
    //    scanf("%d", &age);   //修改
    //else                   //修改
    scanf("%s", a); //scanf("%s", &a); 修改

    pos = change_a(stu, n, num, a, chioce);

    if (pos == -1)
        printf("无此学号\n");
    else
    {
        printf("修改后的信息如下\n");
        printf("姓名 |学号  |性别   |年龄   |籍贯   |系别   |专业班级\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; //p->name[i] = a;修改
        case 2:strcpy(p->sex , a); break; //p->sex = a;修改
        case 3:p->age = atoi(a);   break; //修改
        case 4:strcpy(p->jg, a);   break; //p->jg = a;修改
        case 5:strcpy(p->xb, a);   break; //p->xb;修改
        case 6:strcpy(p->bj, a);   break; //p->bj;修改
        }
        pos = i;
    }
    else 
        pos = -1;
    return pos;
}

看起来你的程序是用来管理学生信息的,其中有一个功能是修改学生信息。你提到当你想要修改姓名的时候程序不往下运行了。

那么我们可以把代码中的一些特殊的位置打上断点,然后使用调试器来单步跟踪程序的执行流程,从而找出问题所在。

具体来说,你可以在函数 change_a() 的 switch 语句的第一个 case 和 default 之前加上断点,然后用调试器单步跟踪程序的执行流程。这样,如果程序在 switch 语句中执行到了 default,就说明出了问题。

设置断点的方法可能略有不同。例如,在 Visual Studio 中,你可以在代码窗口的左边点击鼠标左键来设置断点,或者选中一行代码后按 F9 键来设置断点。

你可以尝试看看是否有输入的选项不正确,或者是否有其他的错误导致了程序的不正常行为。

的代码中在第 49 行出现了错误。你正在尝试将字符数组赋值给一个整型变量,例如 scanf("%d", chioce)。这样的赋值是不合法的,你需要将其改为 scanf("%d", &chioce),这样就能正确地将输入赋值给 chioce。

此外,你还应该检查你的代码中是否有其他错误。例如,第 50 行中的 scanf("%s",&a); 应该改为 scanf("%s",a);,否则会再次出现类似的错误。

主要是因为使用scanf()导致的错误,如果要获取输入到结构的字符字段,那么scanf()函数里的转换说明符要由%s变为%c,但是如果要输入多个字符到结构的某些字段,则这个字段要由字符类型变为字符数组,以便能存储多个字符,下面采用字符数组的方式来进行了修改,修改如下:

#include <stdio.h>
#include <string.h>
    struct student{
        int num,age;
        char name[10000];
        char jg[20];
        char sex[20];
        char zy[20];
        char bj[20];
        char xb[20];
        };
int change_a(struct student *p,int n,int num,char *a,int chioce);
int main(){
    int n,num,chioce,age,i,pos;
    char a[20];
    printf("请输入操作学生人数:"); 
        scanf("%d",&n); 
        struct student stu[n];
    printf("对应顺序输入以下信息即可\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);
     }
    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);
    }
}
 
 
 // 把形参a的类型变为字符指针,以便读取字符数组的内容 
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)
        { // 利用strcpy()函数来复制修改的内容到结构的相应字段
             case 1:strcpy(p->name,a);break;
          case 2:strcpy(p->sex,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;
}
 
 
 

img