I have an array of initialized structures, I need to perform a simple sorting by field (name) in alphabetical order. I know that I need to use qsort() , but I can't do anything. Help please write a function that sorts the mass array.
#include <stdio.h> #include <stdlib.h> #include <string.h> int my_compare(const void*,const void*); typedef 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] ; int main() { /* 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=1;i<8;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=1;i<8;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=1;i<8;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 *)pa; const test *pb = (const test *)pb; /* Сравниваем имена и возвращаем 1, 0 или -1, в зависимости от результата (без учёта регистра): */ return strcmp( pa->name, pb->name ); }