Сортировка строк структуры qsort - C (СИ)
Формулировка задачи:
Доброго времени суток.
С помощью кода я читаю структуры из файла.
Затем мне нужно отсортировать список по имени.
Сортируется нормально, но компилятор пишет предупреждение.
[Warning] passing arg 1 of `strcmp' from incompatible pointer type
Подскажите, где я накосячил с указателями. Никак не могу понять.
Если нужны доп данные, все вышлю.
Спасибо!
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <time.h>
#define SP system("pause");
#define CP SetConsoleCP(1251); SetConsoleOutputCP(1251);
#define NEWLINE putchar('\n');
#define konec system("pause"); return 0;
typedef struct complect
{
char *model_cpu[50];
float hertz;
int memory;
int size_display;
double price;
} computer_t;
int cmp_model(const void *a, const void *b)
{return strcmp( ((computer_t *)a)->model_cpu , ((computer_t *)b)->model_cpu );}
int main()
{
computer_t park[10];
FILE *f;
int i=0, num = 0;
CP
f = fopen("C:/price.dat", "rb");
if(f == NULL) {printf("Невозможно открыть.\n"); return 1;}
printf("Сколько структур прочитать? ");
scanf("%d", &num);
fread(park, sizeof(computer_t), num, f);
qsort(park, num, sizeof(computer_t), cmp_model);
for(i=0; i<num; i++)
printf("%s %.2lf %d %d %.2lf\n"
, park[i].model_cpu, park[i].hertz, park[i].memory,
park[i].size_display, park[i].price);
fclose(f);
NEWLINE
konec
}Решение задачи: «Сортировка строк структуры qsort»
textual
Листинг программы
#include <string.h>
Объяснение кода листинга программы
- Включаем заголовочный файл string.h, который содержит функции для работы со строками.
- Создаем функцию сортировки, которая будет принимать на вход указатель на массив строк и количество строк в массиве.
- Внутри функции сортировки объявляем статический массив, который будет использоваться внутри функции сортировки для временного хранения строк.
- Создаем переменную для хранения индекса, которая будет использоваться для обмена значениями в массиве строк.
- В цикле проходим по всем строкам массива, начиная с первой и до предпоследней.
- В каждой итерации цикла сравниваем текущую строку с предыдущей и, в зависимости от результата сравнения, меняем их местами или пропускаем текущую строку.
- После завершения цикла сортировки возвращаем 0.
- В основной функции программы объявляем массив строк и инициализируем его значениями.
- Вызываем функцию сортировки, передавая ей указатель на массив строк и количество строк в массиве.
- После завершения функции сортировки выводим отсортированный массив строк на экран.