qq_20614949 2023-04-14 09:35 采纳率: 46.2%
浏览 19
已结题

c++结构体函数传递


#include<iostream>
using namespace std;
struct Student{
    int num;
    float score;
    char name[20];
    };
    int n;
    float sort(Student*);
int main()
{    int i=0,j=0,m;
     cout<<"请输入学生个数"<<endl;
     cin>>i;  n=i;
     Student student[i];
     for(j=0;j<i;j++){
         cout<<"请输入学生的学号"<<endl;
         cin>>student[j].num;
         cout<<"请输入学生的姓名"<<endl;
         cin>>student[j].name;
         cout<<"请输入学生的成绩"<<endl;
         cin>>student[j].score; 
     }
     Student*pt=&student[0];
      sort(pt);
      cout<<"将学生按成绩从高到低的成绩排序后的结果为"<<endl;
     for(m=0;m<n;m++){
          cout<<student[m].num<<'/t';
          cout<<student[m].name<<'/t';
          cout<<student[m].score<<'/t';
          cout<<endl;
  
}
}
float sort(Student*p){
      int i,j,m;
      Student temp;
      for(i=0;i<n-1;i++){
            for(j=0;j<n-i-1;j++){
                    if(*(p+j+1).score<*(p+j).socre)
                           temp=*(p+j);
                          *(p+j)=*(p+j+1);
                          *(p+j+1)=temp;
                           
                                       }
      }
          
       }
      
       输入学生数据然后按成绩从高到低的顺序排序然后输出,排序要求函数实现
     函数里我想把结构体数组传过来排序后实现交换但是不行,是哪里出问题呢?

  • 写回答

2条回答 默认 最新

  • Leodong. 2023-04-14 09:50
    关注

    该回答通过自己思路及引用到GPTᴼᴾᴱᴺᴬᴵ搜索,得到内容具体如下:
    您的代码存在一些错误。首先,您在定义学生数组时使用了变量i,但是i的值并未在此时确定,这会导致编译错误。您可以使用动态内存分配或者使用常量或宏来定义学生数组的大小。

    另外,在sort函数中,您使用了指针操作符->来访问结构体成员,但是指针变量p是Student类型的指针,应该使用指针变量名加点号来访问结构体成员。

    此外,您的排序算法也有问题,排序应该根据成绩从高到低进行排序。下面是修改后的代码示例:

    #include <iostream>
    using namespace std;
    
    struct Student {
        int num;
        float score;
        char name[20];
    };
    
    int n;
    
    void sort(Student*);
    
    int main() {
        int i = 0, j = 0, m;
        cout << "请输入学生个数" << endl;
        cin >> i;
        n = i;
        Student* student = new Student[i];
        for (j = 0; j < i; j++) {
            cout << "请输入学生的学号" << endl;
            cin >> student[j].num;
            cout << "请输入学生的姓名" << endl;
            cin >> student[j].name;
            cout << "请输入学生的成绩" << endl;
            cin >> student[j].score;
        }
        sort(student);
        cout << "将学生按成绩从高到低的成绩排序后的结果为" << endl;
        for (m = 0; m < n; m++) {
            cout << student[m].num << '\t';
            cout << student[m].name << '\t';
            cout << student[m].score << '\t';
            cout << endl;
        }
        delete[] student;
    }
    
    void sort(Student* p) {
        int i, j;
        Student temp;
        for (i = 0; i < n - 1; i++) {
            for (j = 0; j < n - i - 1; j++) {
                if ((p + j + 1)->score > (p + j)->score) {
                    temp = *(p + j);
                    *(p + j) = *(p + j + 1);
                    *(p + j + 1) = temp;
                }
            }
        }
    }
    

    在这个示例中,我们使用了动态内存分配来定义学生数组,使用new操作符在堆上分配内存。在sort函数中,我们使用了指针变量名加点号来访问结构体成员,并根据成绩从高到低进行排序。最后,我们在main函数结束前使用delete[]释放了动态分配的内存。

    希望这可以帮助您解决问题!


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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 4月22日
  • 已采纳回答 4月14日
  • 创建了问题 4月14日

悬赏问题

  • ¥60 许可证msc licensing软件报错显示已有相同版本软件,但是下一步显示无法读取日志目录。
  • ¥15 Attention is all you need 的代码运行
  • ¥15 一个服务器已经有一个系统了如果用usb再装一个系统,原来的系统会被覆盖掉吗
  • ¥15 使用esm_msa1_t12_100M_UR50S蛋白质语言模型进行零样本预测时,终端显示出了sequence handled的进度条,但是并不出结果就自动终止回到命令提示行了是怎么回事:
  • ¥15 前置放大电路与功率放大电路相连放大倍数出现问题
  • ¥30 关于<main>标签页面跳转的问题
  • ¥80 部署运行web自动化项目
  • ¥15 腾讯云如何建立同一个项目中物模型之间的联系
  • ¥30 VMware 云桌面水印如何添加
  • ¥15 用ns3仿真出5G核心网网元