Для начала у меня есть эта часть (я буду использовать ее для создания структур сотрудников):
typedef struct
{
char first_name[20], last_name[20];
int birthdate, temporary;
//date of birth YEAR/MONTH/DAY
//temporary employees: 1, else 0
}factory;
Я буду читать данные, используя следующую функцию:
void reading(factory *employee,int *nr)
{
++(*nr);
printf("First name:\n");
fflush(stdin);
gets((employee+*nr)->first_name);
printf("Last name:\n");
fflush(stdin);
gets((employee+*nr)->last_name);
printf("Birthdate:\n");
fflush(stdin);
scanf ("%d" , &((employee + *nr)->birthdate));
printf("Temporary employee? 1 for YES, 0 for NO");
fflush(stdin);
scanf("%d", &((employee + *nr)->temporary));
}
И функция сравнения (я не думаю, что она написана правильно, любые предложения о том, как ее изменить, были бы замечательными - должна ли она быть "сотрудником фабрики *ia" вместо структуры?):
int struct_cmp_by_name(const void *a, const void *b)
{
struct employee *ia = (struct employee *)a;
struct employee *ib = (struct employee *)b;
return strcmp(ia->last_name, ib->last_name);
}
У меня также есть простая функция отображения, прототип которой я скопирую ниже:
void display(factory *employee, int nr)
Другие части кода были опущены для экономии места. Как бы я реализовал функцию qsort в этом случае? У меня есть функция сравнения, но я не знаю, каким должен быть базовый массив или как найти два других параметра размера. Предполагаемая благодарность за любую оказанную помощь.
fflush(stdin)
— это поведение undefined. Возможно, вы захотите найти другой способ сделать это. Кроме того, выбросьтеgets()
и используйте вместо негоfgets()
. И где фактический вызовqsort()
? Это может показаться несколько важным для решения вашей проблемы. Предполагая, что ваш sort-bed является действительным массивомfactory
, ваш компаратор выглядит правильно (за исключением очевидного неправильного отсутствияconst
для этих указателей). - person WhozCraig   schedule 10.02.2014qsort
,++(*nr);
: ,(*nr)
это начало-1
? - person BLUEPIXY   schedule 10.02.2014