Qsort() 比较结构体整数的总和
Qsort() comparing the sum of struct ints
我有一个程序,旨在接收由他们的名字和 3 个测试分数组成的学生的 n 个结构,并且必须使用 qsort(( 根据他们的总分按降序输出它们。虽然我已经能够对它们进行排序,但它们仅按其第一个值排序。
有没有办法对每个学生的值求和然后使用 qsort?我尝试编辑元素数量的值以及比较函数的指针,但没有任何效果
#include <cstdlib>
#include <iostream>
using namespace std;
typedef struct {
char name[16];
int chineseScore;
int mathScore;
int englishScore;
int totalScore;
} student;
int compare(const void* p1, const void* p2) {
student *a = (student *)p1;
student *b = (student *)p2;
return (a - b);
}
int main() {
//gets input
int n;
do{
cin >> n;
}while (n < 1 || n > 10);
student stud[n];
for (int i = 0; i < n; i++){
cin >> stud[i].name >> stud[i].chineseScore >> stud[i].mathScore >> stud[i].englishScore;
stud[i].totalScore = stud[i].chineseScore + stud[i].mathScore + stud[i].englishScore;
}
//sorts array with qsort()
qsort(stud, n, sizeof(student), compare);
//prints result
for (int i = 0; i < n; i++){
cout << stud[i].name << ' '<< stud[i].chineseScore <<' '<< stud[i].mathScore <<' '<< stud[i].englishScore<< endl;
}
return 0;
}
int n; ... student stud[n];
在C++中无效。它使用编译器扩展,允许在C++中使用 C 功能可变长度数组。VLA不是C++的一部分。在C++中使用std::vector<student>
。
您的功能:
int compare(const void* p1, const void* p2) {
student *a = (student *)p1;
student *b = (student *)p2;
return (a - b);
}
无效 -a - b
减去指向学生的指针,然后返回该值 - 该值与学生实际拥有的值无关。取消引用指针并比较其中的值。另外,不要删除恒常性。
int compare(const void* p1, const void* p2) {
const student *a = (const student*)p1;
const student *b = (const student*)p2;
return a->chineseScore - b->chineseScore;
}
有没有办法对每个学生的值求和然后使用 qsort?
声明一个变量,该变量将保存总和并将其初始化为零。然后遍历学生数组,并将学生中某些内容的值添加到您之前声明的 sum 变量中。
相关文章:
- 根据用户回答声明"Players"。用户选择玩家数量。播放器是结构体
- 结构体 S { int align; } 之间的区别;(struct 关键字后的名称)和 struct { int al
- C++ - 如何在结构向量中找到结构体一个成员的最大值?
- 包含 std::list 的结构体的 C++ 初始化
- 结构体和类的不同大小(),彼此具有相同的字段类型
- 如何使用结构体的向量数组?
- 如何使用结构体在C++中更改这些代码?
- 无法在 Mosquitto MQTT Broker 插件上访问结构体 mosquitto 的元素
- 我应该如何在C++中使用结构体解决输入失败的问题?
- Qsort() 比较结构体整数的总和
- 如何使用迭代器指向结构体c++的向量
- 在C++中使用链表的堆栈实现中,访问结构体headNode成员count和top会导致运行时错误
- 如何获取结构体成员的地址
- 创建结构体向量,表达式:向量下标超出范围
- boost::任何带有结构体和无符号整数
- 如何在构造函数中初始化结构体的动态数组?
- 只写结构体的某些字段
- C++ push_back() 一个结构体到一个向量中
- C++14 结构体上的统一初始化
- MPI发送结构体与字节数组和整数