#include #include #include struct immatriculation { int num; char *lettres; int dept; }; int compare_immatriculation(struct immatriculation * im1, struct immatriculation *im2) { int cmp_lettres = strcmp(im1->lettres, im2->lettres); if (im1->dept > im2->dept) return 1; else if (im1->dept < im2->dept) return -1; else if (cmp_lettres != 0) return cmp_lettres; else if (im1-> num > im2->num) return 1; else if (im1-> num < im2->num) return -1; else return 0; } #define NB_IMM 5 int main(void) { struct immatriculation tim[NB_IMM] = {{1234,"AB", 33}, {1234,"AB", 47}, {2345,"AB", 33}, {2345,"AA", 47}, {2345,"AA", 33}}; qsort(tim, NB_IMM, sizeof(struct immatriculation), (int (*)(const void *, const void *))compare_immatriculation); for (int i = 0; i < NB_IMM; i++) printf("%d %s %d\n", tim[i].num, tim[i].lettres, tim[i].dept); return EXIT_SUCCESS; }