```希望能够讲讲这个编程学生管理系统的修改信息部分
void modify() //*修改信息*
{
int i, item, num = -1;//num代表人数
char sex1, s1[LEN + 1], s2[LEN + 1]; /* 以姓名和学号最长长度+1为准*/
float score1;
printf("请输入要要修改的学生的学号:\n");
scanf("%s", s1);
for (i = 0; i < n; i++)
{
if (strcmp(stu[i].studentid, s1) == 0)
{/*比较字符串是否相等*/
num = i;
printf("------------------\n");
printf("1.修改姓名\n");
printf("2.修改年龄\n");
printf("3.修改性别\n");
printf("4.修改C语言成绩\n");
printf("5.修改高等数学成绩\n");
printf("6.修改大学英语成绩\n");
printf("7.退出本菜单\n");
printf("------------------\n");
while (1)
{
printf("请选择子菜单编号:");
scanf("%d", &item);
switch (item)
{
case 1:
printf("请输入新的姓名:\n");
scanf("%s", s2);
strcpy(stu[num].name, s2);
break;
case 2:
printf("请输入新的年龄:\n");
scanf("%d", stu[num].StudentAge);
break;
case 3:
printf("请输入新的性别:\n");
scanf("%s", &sex1);
stu[i].sex=sex1;
break;
case 4:
printf("请输入新的C语言成绩:\n");
scanf("%f", &score1);
stu[num].score[0] = score1;
break;
case 5:
printf("请输入新的高等数学成绩:\n");
scanf("%f", &score1);
stu[num].score[1] = score1;
break;
case 6:
printf("请输入新的大学英语成绩:\n");
scanf("%f", &score1);
stu[num].score[2] = score1;
break;
case 7: return;
default:printf("请在1-6之间选择\n");
}
}
printf("修改完毕!请及时保存!\n");
}
else{
printf("没有该学生学号!!!");
}
}
}
```c++
你的代码行不行啊,一会儿(stu[num]一会儿(stu[i]
该回答通过自己思路及引用到各个渠道搜索综合及思考,得到内容具体如下:
这是一个C++编写的学生管理系统中修改学生信息的函数。该函数的主要功能是通过输入学生学号,查找学生信息并提供一系列选项,允许用户选择要修改的信息项,然后进行修改。下面是对该函数的一些说明和建议:
1、修改年龄
在修改年龄时,使用了错误的语法。应该使用取地址符&来获取变量stu[num].StudentAge的地址,然后将新的年龄值存储到该地址中。修改后的代码应该是:
printf("请输入新的年龄:\n");
scanf("%d", &stu[num].StudentAge);
2、修改性别
在修改性别时,使用了错误的语法。应该将变量sex1定义为字符类型,而不是字符指针类型。修改后的代码应该是:
char sex1;
printf("请输入新的性别:\n");
scanf(" %c", &sex1); // 注意空格,避免读入上一次输入的回车
stu[num].sex = sex1;
3、错误提示
在循环中的else分支中,应该输出错误提示,并继续等待用户输入正确的学生学号。修改后的代码应该是:
else {
printf("没有该学生学号,请重新输入:\n");
}
4、修改完毕提示
在修改结束后,应该输出修改完毕提示。修改后的代码应该是:
printf("修改完毕!请及时保存!\n");
5、函数返回值
函数没有返回值,应该将函数的返回类型设置为void。修改后的函数声明应该是:
void modify();
6、优化建议
在修改菜单的选项比较少时,可以使用switch语句进行处理。但是,如果选项较多时,建议使用一个单独的函数来处理每个选项,这样可以使代码更加清晰、易于维护。另外,在输入学生学号时,建议使用fgets函数读入一行字符串,这样可以避免因输入格式错误而造成的程序崩溃。
如果以上回答对您有所帮助,点击一下采纳该答案~谢谢
不知道你这个问题是否已经解决, 如果还没有解决的话:全缺省参数
对所有参数都设置了备胎:
void TestFunc(int a = 10, int b = 20, int c = 30)
{
cout<<"a = "<<a<<endl;
cout<<"b = "<<b<<endl;
cout<<"c = "<<c<<endl;
}
缺省函数的传参是从左向右依次给形参的
所以我们调用上面的TestFunc时,写成 TestFunc(10,2);
是将10给了形参a,2给了形参b,c没有传参,使用的就是给的默认值
半缺省参数
只对部分参数设置了备胎:
void TestFunc(int a, int b = 10, int c = 20)
{
cout<<"a = "<<a<<endl;
cout<<"b = "<<b<<endl;
cout<<"c = "<<c<<endl;
}
注意:
半缺省参数必须从右往左依次来给出,不能间隔着给。
不能写成:
void TestFunc(int a = 10, int b = 20, int c)
否则在传参的时候, TestFunc(10, 20);
不知道参数是给哪个形参的
没有缺省必须要传参。
比如我们定义了这样一个缺省函数:
void TestFunc(int a, int b = 10, int c = 20)
{
cout<<"a = "<<a<<endl;
cout<<"b = "<<b<<endl;
cout<<"c = "<<c<<endl;
}
调用TestFunc时不能写成TestFunc(, , ,)的形式,没有缺省一定要传参。
缺省参数不能在函数声明和定义中同时出现 。
//a.h
void TestFunc(int a = 10);
// a.c
void TestFunc(int a = 20)
{}
// 注意:如果声明与定义位置同时出现,恰巧两个位置提供的值不同,那编译器就无法确定到底该用那个缺省值。