gpt4 book ai didi

c++ - 排序后结构数组的第一个元素变为空

转载 作者:太空宇宙 更新时间:2023-11-04 11:28:51 30 4
gpt4 key购买 nike

我编写代码从文本文件中读取学生姓名和他们的 CGPA,并将它们保存在类型结构数组中,然后根据 CGPA 将它们按升序排序。排序后数组第一个元素为空,为什么?

学生类型的结构

struct student{
char name[20];
float cgpa;
};

读取文件的代码

while(!inFile.eof()){    
inFile>>students[i].name >> students[i].cgpa;
cout << i << "\t" << students[i].name << "\t\t" << students[i].cgpa << endl;
i++;
}

Swap 函数,用于根据 CGPA 对数组内容进行升序排序。

void swap(student studentsRcrd[]){
student tempValue;
for(int i=0; i<10; i++){
for(int j=0; j<10; j++){
if(studentsRcrd[j].cgpa > studentsRcrd[j+1].cgpa){
tempValue = studentsRcrd[j];
studentsRcrd[j] = studentsRcrd[j+1] ;
studentsRcrd[j+1] = tempValue;
}
}
}
}

命令提示符的最终输出

No      Name            CGPA
0 ▄ 0
1 Maria 2.4
2 Humza 2.6
3 Saira 2.6
4 Anila 3
5 Junaid 3
6 Usman 3.4
7 Aasim 3.5
8 Talaal 3.8
9 Haris 3.9
10 Ahmer 4

最佳答案

交换函数必须是这样的

void swap(student studentsRcrd[]){
student tempValue;
for(int i=0; i<9; i++){
for(int j=0; j<9; j++){
if(studentsRcrd[j].cgpa > studentsRcrd[j+1].cgpa){
tempValue = studentsRcrd[j];
studentsRcrd[j] = studentsRcrd[j+1] ;
studentsRcrd[j+1] = tempValue;
}
}
}
}

因为当 j==10 时 studentsRcrd[j+1] 将是 studentsRcrd[11] 并且在这个位置上没有放任何东西所以它有零,所以在排序函数时把这个零放在顶部因为它最较小的值,然后按升序打印。所以将循环条件更改为

i < 9

j < 9

关于c++ - 排序后结构数组的第一个元素变为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25616987/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com