Помогите с указателями в C, используя qsort, bsearch

У меня возникли проблемы с некоторыми используемыми обозначениями указателя/массива. У меня есть два списка, и я их сортирую, а затем пытаюсь их отобразить. У меня было 3 комментария в моем коде ниже относительно того, что такое объявления и почему. Мой код выглядит так:

int Compare(const void *a, const void *b);

void SortStudents(char *studentList[], size_t studentCount) 
{
    qsort(studentList, studentCount, sizeof(studentList[0]), Compare);
}

int Compare(const void *a, const void *b) 
{
    return (strcmp(*(char **)a, *(char **)b));
}

/*Determines which registrants did not attend the first meeting by searching for registrants 
 that are not in attendees set. */
void DisplayClassStatus(
                        const char *registrants[], size_t registrantCount,
                        const char *attendees[],   size_t attendeeCount)
{
    char **missedFirstMeeting; // not sure if this is the right declaration
    char *start, *end;

    // not sure if this is right with the &attendees and registrants for the bsearch()
    missedFirstMeeting = bsearch(&attendees, registrants, attendeeCount, 
                                 sizeof(attendees[0]), Compare);
    printf("Missed First Meeting: \n");

   //not sure if this the way to traverse through the array using pointers to display
    for (start = missedFirstMeeting, end = &missedFirstMeeting[registrantCount-1]; start < end; ++start) {
        printf("%s", *start);
    }
}

person Crystal    schedule 20.02.2010    source источник


Ответы (1)


Похоже, это домашнее задание, поэтому я отвечу так, чтобы (надеюсь) привести вас в правильном направлении.

Функция bsearch() ищет один элемент в отсортированном списке и возвращает либо его местоположение, либо индикатор, указывающий, что он не найден. Ваш код, опубликованный выше, похоже, использует bsearch() по-другому.

Подумайте о том, чтобы рассматривать каждого зарегистрировавшегося отдельно и использовать bsearch() более одного раза, чтобы увидеть, есть ли каждый зарегистрированный в списке участников. Если нет, то укажите имя регистранта. Не забывайте, что bsearch() работает корректно только в том случае, если список отсортирован.

person Greg Hewgill    schedule 20.02.2010