如何使用 qsort 对结构(由几个不同的元素组成)进行排序?

How do I sort structures (consisting of several different elements) using qsort?

特别是关于 .txt 文件中的列表,"char Name"(jmeno) "char Surname"(prijmeni) "float Average"(prumer) --> 学生的平均成绩 ( 1-5年级),按平均数用qsort排序。

到目前为止我的代码如下所示:

FILE *otevriSoubor(char *jmeno, char* mode)
{
    FILE *soubor;
    soubor = fopen(jmeno, mode);
    if (!soubor)
    {
        printf("spatne jmeno souboru\n");
        system("PAUSE");
        exit(1);
    }
    return soubor;
}
int srovnaniprumeru(const void *a, const void *b)
{
    int c = ((Student *) a)->prumer;
    int d = ((Student *) b)->prumer;
    if (c > d) return -1;
    if (c < d) return 1;
    return 0;
}
int main(void)
{
    typedef struct
    {
        char jmeno[MAXDELKA];
        char prijmeni[MAXDELKA];
        float prumer;
    } Student;
    qsort(bakaweb, 5, sizeof(Student), srovnaniprumeru);
    system("PAUSE");
    return 0;
}

你走在正确的轨道上。以下是需要改进的地方:

  • 您的代码不完整:您没有阅读学生详细信息。您可以为此使用 fscanf()

  • 您根据成绩转换为 int 进行排序。如果成绩不是整数,这可能不正确。

以这种方式完成您的代码并修复您的排序功能:

int srovnaniprumeru(const void *a, const void *b) {
    float c = ((const Student *)a)->prumer;
    float d = ((const Student *)b)->prumer;
    if (c > d) return -1;
    if (c < d) return 1;
    return 0;
}