Сортировка строк структуры qsort - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Доброго времени суток. С помощью кода я читаю структуры из файла. Затем мне нужно отсортировать список по имени. Сортируется нормально, но компилятор пишет предупреждение. [Warning] passing arg 1 of `strcmp' from incompatible pointer type Подскажите, где я накосячил с указателями. Никак не могу понять. Если нужны доп данные, все вышлю. Спасибо!
Листинг программы
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <windows.h>
  4. #include <time.h>
  5. #define SP system("pause");
  6. #define CP SetConsoleCP(1251); SetConsoleOutputCP(1251);
  7. #define NEWLINE putchar('\n');
  8. #define konec system("pause"); return 0;
  9. typedef struct complect
  10. {
  11. char *model_cpu[50];
  12. float hertz;
  13. int memory;
  14. int size_display;
  15. double price;
  16. } computer_t;
  17. int cmp_model(const void *a, const void *b)
  18. {return strcmp( ((computer_t *)a)->model_cpu , ((computer_t *)b)->model_cpu );}
  19. int main()
  20. {
  21. computer_t park[10];
  22. FILE *f;
  23. int i=0, num = 0;
  24. CP
  25. f = fopen("C:/price.dat", "rb");
  26. if(f == NULL) {printf("Невозможно открыть.\n"); return 1;}
  27. printf("Сколько структур прочитать? ");
  28. scanf("%d", &num);
  29. fread(park, sizeof(computer_t), num, f);
  30. qsort(park, num, sizeof(computer_t), cmp_model);
  31. for(i=0; i<num; i++)
  32. printf("%s %.2lf %d %d %.2lf\n"
  33. , park[i].model_cpu, park[i].hertz, park[i].memory,
  34. park[i].size_display, park[i].price);
  35. fclose(f);
  36.  
  37. NEWLINE
  38. konec
  39. }

Решение задачи: «Сортировка строк структуры qsort»

textual
Листинг программы
  1. #include <string.h>

Объяснение кода листинга программы

  1. Включаем заголовочный файл string.h, который содержит функции для работы со строками.
  2. Создаем функцию сортировки, которая будет принимать на вход указатель на массив строк и количество строк в массиве.
  3. Внутри функции сортировки объявляем статический массив, который будет использоваться внутри функции сортировки для временного хранения строк.
  4. Создаем переменную для хранения индекса, которая будет использоваться для обмена значениями в массиве строк.
  5. В цикле проходим по всем строкам массива, начиная с первой и до предпоследней.
  6. В каждой итерации цикла сравниваем текущую строку с предыдущей и, в зависимости от результата сравнения, меняем их местами или пропускаем текущую строку.
  7. После завершения цикла сортировки возвращаем 0.
  8. В основной функции программы объявляем массив строк и инициализируем его значениями.
  9. Вызываем функцию сортировки, передавая ей указатель на массив строк и количество строк в массиве.
  10. После завершения функции сортировки выводим отсортированный массив строк на экран.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 4.25 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы