Кроме того, есть флаги препроцессора
Кроме того, есть флаги препроцессора для получения отладочной печати (-DDEBUG) и для включения драйвера отладки в вызываемую функцию (-DDRIVER). Для получения более детальной информации следует обратиться к исходному тексту функции.
ПРИМЕР
Следующая программа считывает тройки: цепочка символов и два числа, и размещает их в хеш-таблице, отбрасывая дубликаты. Затем считываются цепочки символов, находятся и распечатываются соответствующие элементы хеш-таблицы.
#include <stdio.h> #include <search.h>
struct info { /* Дополнительная информация, ас- социированная с ключом */ int age, room; };
#define NUM_EMPL 5000 /* Количество элементов в таблице поиска */
main () { /* Массив для размещения цепочек символов */ char string_space [NUM_EMPL*20];
/* Массив для размещения информации о служащих */ struct info info_space [NUM_EMPL];
/* Указатель на свободное место в массиве цепочек */ char *str_ptr = string_space;
/* Указатель на свободное место в массиве служащих */ struct info *info_ptr = info_space;
ENTRY item, *found_item, *hsearch ();
char name_to_find [30]; /* Искомое имя */ int i;
/* Создать таблицу */ (void) hcreate (NUM_EMPL);
/* Цикл чтения исходной информации */ while (scanf ("%s%d%d", str_ptr, &info_ptr->age, &info_ptr->room) != EOF && i++ < NUM_EMPL) {
/* Сформировать элемент таблицы */ item.key = str_ptr; item.data = (char *) info_ptr; str_ptr += strlen (str_ptr) + 1; info_ptr++;
/* Поместить элемент в таблицу */ (void) hsearch(item, ENTER); };
/* Доступ к таблице */ item.key = name_to_find; while (scanf ("%s", item.key) != EOF) {
if ((found_item = hsearch (item, FIND)) != NULL) {
/* Если элемент найден в таблице */ (void) printf ("found %s, age= %d, room= %d\n", found_item->key, ((struct info *) found_item->data)->age, ((struct info *) found_item->data)->room);
} else { /* Если элемент не найден в таблице */ (void) printf ("no such employee %s\n", name_to_find) } } }
СМ. ТАКЖЕ
, , , , , .
ДИАГНОСТИКА
Функция hsearch возвращает пустой указатель NULL, если значение переменной action равно FIND и элемент не может быть найден или если значение переменной action равно ENTER и таблица заполнена.
ПРЕДОСТЕРЕЖЕНИЯ
Функции hsearch и hcreate используют функцию для выделения памяти.
ОГРАНИЧЕНИЯ
В каждый момент времени может быть активна только одна хеш-таблица.
Содержание Назад Вперед
Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий