c++结构体函数传递


#include
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"请输入学生的学号"<<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'/t';
          cout<name<<'/t';
          cout<score<<'/t';
          cout<<endl;
  
}
}
float sort(Student*p){
      int i,j,m;
      Student temp;
      for(i=0;i1;i++){
            for(j=0;j1;j++){
                    if(*(p+j+1).score<*(p+j).socre)
                           temp=*(p+j);
                          *(p+j)=*(p+j+1);
                          *(p+j+1)=temp;
                           
                                       }
      }
          
       }
      
       输入学生数据然后按成绩从高到低的顺序排序然后输出,排序要求函数实现
     函数里我想把结构体数组传过来排序后实现交换但是不行,是哪里出问题呢?

该回答通过自己思路及引用到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[]释放了动态分配的内存。

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


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

在函数sort的实现中,对于变量temp、i、j和m应该放在函数内部定义,而不能与全局变量混用。此外,在进行比较和交换时,应该把if语句的条件括号括起来,否则if语句只会执行第一行,而不是整个if代码块。

修改后的代码如下所示:

#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[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;  
    }
    return 0;
}

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


这样就可以按照成绩从高到低的顺序将所有学生信息输出了。