尝试根据已排序的学生ID显示来自文件的学生数据

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了尝试根据已排序的学生ID显示来自文件的学生数据相关的知识,希望对你有一定的参考价值。

我无法对从文件中提取的数据进行排序,我希望它按ID的升序打印到控制台,我无法将char ID转换为整数ID进行比较

struct student{
    char ID[15];
    char name[20];
    char add[20];
    char parname[20];
    int Class;
    float gpa;
    long unsigned int phone_no;
};
void sort_accord_id()
{
    while(fread(&stu,sizeof(stu),1,fp))
{
    strcpy(s[count].ID,stu.ID);
    strcpy(s[count].name,stu.name);
    printf("ID:%s
", stu.ID);

    printf("	%s",s[count].ID);
    printf("	%s",s[count].name);
    count++;
}



for(i=0;i<=count-1;i++)
{
    for(j=0;j<=count-1;j++)
    {
        if(s[j].ID-'0'<s[j+1].ID-'0')
        {
            temp=s[j];
            s[j]=s[j+1];
            s[j+1]=temp;
        }
    }
}    
}
答案

如果它正确地读取(我假设是)学生结构'对象'stu,一种方法是将它们全部保存在一个数组中(在堆上动态分配将是最好的,否则只要大到足以保持它们所有[小心!]),然后用stdlib.hqsort()对它们进行排序。

如果你愿意,我可以提供有关动态数组的帮助,但是一些谷歌搜索也可以做到我确定的技巧。

如果你有一系列的学生结构(我也建议你输入typedef,但为了这个答案的清晰,我不会)称为arr,你可以这样排序:

  • 第一个#include <stdlib.h>位于文件顶部
  • 然后使用以下函数将其ID与strcmp进行比较: int student_cmp(const void* a, const void* b) { struct student* studentA = (struct student*)a; struct student* studentB = (struct student*)b; return strcmp(studentA->ID, studentB->ID); }
  • 最后,你可以像你这样在你的qsort中调用sort_accord_id()qsort(arr, 2, sizeof(struct student), student_cmp);

如果您有其他问题,请告诉我。欢迎来到Stack Overflow!

以上是关于尝试根据已排序的学生ID显示来自文件的学生数据的主要内容,如果未能解决你的问题,请参考以下文章

用java写一个冒泡排序,封装一个学生,学生有属性,姓名,年龄,已学生年龄排序

面向对象案例 - 学生信息管理系统V1.0

面向对象案例 - 学生信息管理系统V1.0

使用 C 编程按学生电子邮件 ID 搜索 CSV 文件并显示该学生的完整详细信息 [关闭]

根据学生 ID 聚合多个集合

从文件读数据插入到链表