Я работаю 5 дней подряд над этой программой и не могу понять, почему она так себя ведет. Спасибо за помощь.
В файле speller.c есть код, который вызывает 4 функции в файле Dictionary.c
В speller.c он вызывает определенную функцию:
bool misspelled = !check(word);
Если слово с ошибкой имеет значение false, это означает, что функция проверки вернула значение true.
Вот функция проверки в dictionary.c:
bool check(const char *word)
{
int key = hash(word);
printf("Word: %s position: %i\n", word, key);
node* trav = dictArray[key];
while (trav != NULL)
{
if(trav->word == word)
printf("%s found in the dictionary\n", word);
return true;
trav = trav->next;
}
printf("%s NOT found in the dictionary\n", word);
return false;
Check () будет проверять хеш-таблицу, сможет ли она найти слово, переданное в качестве аргумента в хеш-таблице, и напечатает каждое слово и его ключ. Если он его находит, он печатает сообщение и возвращает true
. Если нет, то печатает сообщение о том, что так, и возвращает false
.
Хеш-таблица представляет собой массив из 26 элементов, каждый из которых представляет собой структуру с 2 элементами, один из которых является строкой, а другой - указателем на следующую структуру (узел) в списке.
Узлы добавляются в списки в зависимости от первой буквы слова.
Проблема в том, что я проверил каждое слово, добавляемое в массив, и даже когда этого слова нет, функция все равно возвращает true
.
Фактически, он возвращает true
для каждого слова, переданного в качестве аргумента.
Теперь действительно загадочное поведение заключается в том, что check () должен что-то напечатать на экран, перед возвратом либо true
или false
. Либо ...found ...
, либо ... NOT found ...
.
Ну, это не так. Но он все равно возвращает «true», что меня смущает.
Любая помощь?
Должен ли я вставить весь код из обоих файлов?