我编写代码以从文本文件中读取学生姓名及其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++;
}
交换函数,用于根据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
答案 0 :(得分:1)
交换功能必须如下所示
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
答案 1 :(得分:0)
您有10名成员的数据!那是0到9.但是当你使用 -
for(int i=0; i<10; i++){
for(int j=0; j<10; j++){
当j == 9
它将数据与下一个内存位置(j = 10
)交换时,这不在你的范围内!
试试这个 -
for(int i=0; i<9; i++){ // Make i<9 and j<9
for(int j=0; j<9; j++){ // when j == 9, it will swap the data with next memory location
if(studentsRcrd[j].cgpa > studentsRcrd[j+1].cgpa){
tempValue = studentsRcrd[j];
studentsRcrd[j] = studentsRcrd[j+1] ;
studentsRcrd[j+1] = tempValue;
}
}