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

可以帮帮我吗谢谢!
修改完善如下,改动处见注释,供参考:
#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;
}