gpt4 book ai didi

c - 将函数的输出按从高到低的顺序显示

转载 作者:行者123 更新时间:2023-11-30 18:42:33 47 4
gpt4 key购买 nike

我有一个结构,定义如下:

typedef struct structure
{
char names[20];
int scores[4];
float average;
char letter;
} stuff;

并从该结构创建了这个数组:

stuff everything[13];

稍后,调用一个函数:

display(everything);

在屏幕上显示一个基本图表,其中显示 13 个姓名、13 个测试 1、13 个测试 2、13 个测试 3、13 个测试 4、13 个平均值和 13 个字母等级,无顺序。作为引用,该函数如下所示:

void display(stuff *everything)
{
int q = 0;

printf("\n\n Name \t\t E1 \t E2 \t E3 \t E4 \t Avg \t Grade");
for(q=0; q<13; q++)
{
printf("\n %s \t %d \t %d \t %d \t %d \t %.2f \t %c",
everything[q].names,
everything[q].scores[0],
everything[q].scores[1],
everything[q].scores[2],
everything[q].scores[3],
everything[q].average,
everything[q].letter);
}
return;
}

我想获取平均值并将它们相互比较,以便当它显示到屏幕上时,第一个结果是最高平均值,然后从那里开始下降。我很确定我会使用“qsort()”,但我在理解它的语法方面遇到了极大的困难。对于 qsort 以及如何在这个特定实例中使用它的一些帮助,我们将不胜感激。

最佳答案

man 3 qsort() 。如果您阅读本文,您将能够使用它。您唯一需要的是一个适当的比较器函数,该函数返回作为其参数给出的两个元素的顺序:

int comp_avg(const void *p1, const void *p2)
{
const stuff *s1 = p1, *s2 = p2;
return (s1->average > s2->average) - (s1->average < s2->average);
}

然后你可以轻松地对数组进行排序:

qsort(
everything,
sizeof(everything) / sizeof(everything[0]),
sizeof(everything[0]),
comp_avg
);

关于c - 将函数的输出按从高到低的顺序显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16292977/

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