我无法对从文件中提取的数据进行排序,我希望它按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\n", stu.ID);
printf("\t%s",s[count].ID);
printf("\t%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.h
的qsort()
对它们进行排序。
如果你愿意,我可以提供有关动态数组的帮助,但是一些谷歌搜索也可以做到我确定的技巧。
如果你有一系列的学生结构(我也建议你输入typedef,但为了这个答案的清晰,我不会)称为arr
,你可以这样排序:
#include <stdlib.h>
位于文件顶部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!