gpt4 book ai didi

无法对结构数组进行排序

转载 作者:太空宇宙 更新时间:2023-11-04 07:00:00 24 4
gpt4 key购买 nike

我有一个结构数组,我从文本文件中读取它。我写了一个排序函数,它必须按字母顺序(A-Z)中的名称字段对这个数组进行排序,但它不起作用,我不知道是什么做,plz,你能告诉我我的错误吗(代码编译,但它不排序任何东西)。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int my_compare(const void*,const void*);
typedef struct {
char name[100];
char surname[100];
char sname[100];
char posada[100];
char buff[100];
int staz;
char buff2[100];
int oklad;
} test;
;
int main()
{
test mass[7];
/*struct test{
char name[100];
char surname[100];
char sname[100];
char posada[100];
char buff[100];
int staz;
char buff2[100];
int oklad;
}mass[8];
*/
FILE *fo;
if((fo=fopen("C:\\Users\\andyb\\Desktop\\test2.txt","r"))==NULL)
printf("error");
for(int i=0;i<7;i++)
{
fgets(mass[i].name,50,fo);
fgets(mass[i].surname,50,fo);
fgets(mass[i].sname,50,fo);
fgets(mass[i].posada,50,fo);
fgets(mass[i].buff,50,fo);
mass[i].staz=atoi(mass[i].buff);
fgets(mass[i].buff2,50,fo);
mass[i].oklad=atoi(mass[i].buff2);
}
fclose(fo);
for(int i=0;i<7;i++)
{
printf("%s%s%s%s%d\n%d\n",mass[i].name,mass[i].surname,mass[i].sname,mass[i].posada,mass[i].staz,mass[i].oklad);
}
qsort( mass, sizeof(mass)/sizeof(mass[0]), sizeof(mass[0]), my_compare );
for(int i=0;i<7;i++)
{
printf("%s%s%s%s%d\n%d\n",mass[i].name,mass[i].surname,mass[i].sname,mass[i].posada,mass[i].staz,mass[i].oklad);
}

return 0;
}

int my_compare(const void *a,const void *b)
{
const test *pa = (const test *)a;
const test *pb = (const test *)b;

return strcmp( pa->name, pb->name );
}

最佳答案

您的 for 循环看起来不正确:

取而代之的是:

for(int i=1;i<8;i++)

你应该这样说:

for(int i=0;i<8;i++)

否则,mass[0] 将包含垃圾数据,并且当您尝试对其进行排序时会出现各种未定义的行为。

关于无法对结构数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39888390/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com