-1

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

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

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

stuff everything[13];

后来,一个函数调用:

display(everything);

在屏幕上显示一个基本图表,按顺序显示 13 个名称、13 个 test1s、13 个 test2s、13 个 test3s、13 个 test4s、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 的一些帮助以及如何在此特定情况下使用它。

4

1 回答 1

3

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
);
于 2013-04-30T06:01:14.723 回答