Код ошибки в моем цикле while, пытаясь прочитать строку за строкой через файл. в C

#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 при ошибках.