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

时间:2017-06-24 17:44:56

标签: c++ list sorting struct 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;
}

1 个答案:

答案 0 :(得分: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;
}