#c #file #while-loop #hashtable
#c #файл #цикл while #хэш-таблица
Вопрос:
Я пытаюсь получать входные данные из файлового словаря, по одной строке за раз, я знаю, что каждая строка в файловом словаре — это всего одно слово. Я получаю код ошибки при попытке скомпилировать этот код, и здесь ошибка :
словарь.c:66:36: ошибка: сравнение различных типов указателей (‘char‘ и ‘int ()(FILE *)’) [-Ошибка,-Wcompare-distinct-pointer-types] while ( (fgets(word, 46, dic))!= feof )
Я очень новичок в кодировании и не уверен, можно ли это сделать таким образом, если я пытаюсь использовать неправильный метод или просто неправильно кодирую это. Заранее благодарю вас за помощь.
bool load(const char* dictionary)
{
char word[46];
unsigned long key;
//remember file name
FILE* dic = fopen(dictionary , "r");
if (dic == NULL)
{
printf("Could not open file..n");
return false;
}
while ( (fgets(word, 46, dic)) != feof )
{
numberWords ;
//Save new word
node* newWord = malloc(sizeof(node));
strcpy(newWord->dicWords, word);
newWord->next = NULL;
//Use Hash function on new word found
key = hash(word);
//Enter word into Hashtable
if ( hashTable[key] == NULL )
{
hashTable[key] = newWord;
}
else
{
newWord->next = hashTable[key];
hashTable[key] = newWord;
}
}
fclose(dic);
return false;
Комментарии:
1. Имейте в виду, что
fgets
newline
в конце каждого ввода сохраняется a . Вы можете удалить его с помощью этой строки:word [ strcspn(word, "rn") ] = 0;
Ответ №1:
feof
является идентификатором библиотечной функции. Пожалуйста, измените
while ( (fgets(word, 46, dic)) != feof )
Для
while ( (fgets(word, 46, dic)) != NULL )
Ответ №2:
Вы получаете это, потому что сравниваете результат fgets
с функцией feof
. Вы, вероятно, хотели написать feof(fp)
или, возможно EOF
.
Что также неверно, поскольку fgets
возвращает NULL при ошибках.