Код может использовать ту же функцию сравнения, что и в qsort()
, сначала сформировав struct student
и использовать его .id
член.
struct student dummy;
dummy.id = key;
struct student *res = bsearch(&dummy, S, SIZE, sizeof S[0], compare1);
В качестве альтернативы код может использовать другое сравнениеи используйте int key
напрямую.
int bsearch_compare(const void* key_ptr, const void* element_ptr){
int id1 = *((const int *)key_ptr);
int id2 = ((const struct student *)element_ptr)->id;
return id1 - id2;
}
struct student *res = bsearch(&key, S, SIZE, sizeof S[0], bsearch_compare);
Для корректной работы всего диапазона int
измените обе функции сравнения:
// return id1 - id2;
return (id1 > id2) - (id1 < id2);