关于#c++#的问题,请各位专家解答!




```希望能够讲讲这个编程学生管理系统的修改信息部分
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函数读入一行字符串,这样可以避免因输入格式错误而造成的程序崩溃。

如果以上回答对您有所帮助,点击一下采纳该答案~谢谢

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 你可以看下这个问题的回答https://ask.csdn.net/questions/7631960
  • 这篇博客你也可以参考下:c++如何保证输入始终是数字而不是字符?
  • 除此之外, 这篇博客: 关于C++基础的一些“碎碎念”中的 缺省参数分类 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:
    • 全缺省参数

      对所有参数都设置了备胎:

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

    注意:

    1. 半缺省参数必须从右往左依次来给出,不能间隔着给。

      不能写成:

      void TestFunc(int a = 10, int b = 20, int c)
      

      否则在传参的时候, TestFunc(10, 20);不知道参数是给哪个形参的

    2. 没有缺省必须要传参。

      比如我们定义了这样一个缺省函数:

      void TestFunc(int a, int b = 10, int c = 20)
      {
        cout<<"a = "<<a<<endl;
         cout<<"b = "<<b<<endl;
          cout<<"c = "<<c<<endl;
      }
      

      调用TestFunc时不能写成TestFunc(, , ,)的形式,没有缺省一定要传参。

    3. 缺省参数不能在函数声明和定义中同时出现 。

    //a.h
    void TestFunc(int a = 10);	
    
    // a.c
    void TestFunc(int a = 20)
    {}
    // 注意:如果声明与定义位置同时出现,恰巧两个位置提供的值不同,那编译器就无法确定到底该用那个缺省值。
    
    1. 缺省值必须是常量或者全局变量
    2. C语言不支持(编译器不支持)

  • 您还可以看一下 张立铜老师的C++入门基础精讲视频课程中的 数组的介绍小节, 巩固相关知识点

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^