How to search struct with bsearch in C

2 Answers

0 votes
#include <stdlib.h>
#include <stdio.h>

// void* bsearch( const void *key, const void *ptr, size_t count, size_t size,
//                int (*comp)(const void*, const void*) );
 
struct DB {
    int code;
    char const *value;
} data[] = {
    {1, "C"}, {2, "C++"}, {3, "Java"}, {4, "Python"}, {5, "C#"}
};
 
int compare(void const *ldb, void const *rdb) {
    struct DB const *const l = ldb;
    struct DB const *const r = rdb;
 
    if (l->code < r->code) {
        return -1;
    }
    else { 
        if (l->code > r->code) { 
            return 1;
        }
    }
    
    return 0;
}
 
int main(void) 
{
    struct DB db = { .code = 3 };
    struct DB const *result = bsearch(&db, data, sizeof data / sizeof data[0],
                                     sizeof data[0], compare);
    
    if (result) {
        printf("found: %d: %s\n", result->code, result->value);
    } else {
        printf("not found\n");
    }
}




/*
run:

found: 3: Java

*/

 



answered Mar 3, 2024 by avibootz
0 votes
#include <stdlib.h>
#include <stdio.h>

// void* bsearch( const void *key, const void *ptr, size_t count, size_t size,
//                int (*comp)(const void*, const void*) );
 
struct DB {
    int code;
    char const *value;
} data[] = {
    {1, "C"}, {2, "C++"}, {3, "Java"}, {4, "Python"}, {5, "C#"}
};
 
int compare(void const *ldb, void const *rdb) {
    struct DB const *const l = ldb;
    struct DB const *const r = rdb;
 
    return (l->code > r->code) - (l->code < r->code);
}
 
int main(void) 
{
    struct DB db = { .code = 3 };
    struct DB const *result = bsearch(&db, data, sizeof data / sizeof data[0],
                                     sizeof data[0], compare);
    
    if (result) {
        printf("found: %d: %s\n", result->code, result->value);
    } else {
        printf("not found\n");
    }
}




/*
run:

found: 3: Java

*/

 



answered Mar 3, 2024 by avibootz

Related questions

1 answer 156 views
1 answer 228 views
1 answer 105 views
1 answer 126 views
1 answer 131 views
1 answer 140 views
...