Помогите с указателями в C используя qsort, bsearch - PullRequest
2 голосов
/ 21 февраля 2010

У меня проблемы с некоторыми используемыми обозначениями указателя / массива. У меня есть два списка, и я сортирую их, а затем пытаюсь отобразить их. У меня было 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);
    }
}

1 Ответ

1 голос
/ 21 февраля 2010

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

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

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

...