2016-10-12 13 views
-1

私はファイルの辞書から入力を取ろうとしています、一度に1行、私はファイル辞書の各行がただ一つの単語であることを知っています。このコードをコンパイルしようとするとエラーコードが表示されます。エラーは次のとおりです。whileループのエラーコード。ファイルを1行ずつ読み込みます。 Cで

dictionary.c:66:エラー:異なるポインタタイプの比較( ''と 'int() FILEの*) ') [-Werror、-Wcompare-明確なポインタ-タイプ] しばらく((関数fgets(ワード、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; 
+0

'fgets'は各入力の最後に' newline'を保持していることに注意してください。この行で削除することができます: 'word [strcspn(word、" \ r \ n ")] = 0;' –

答えて

2

feofは、ライブラリ関数の識別子です。あなたは機能feofに対してfgetsの結果を比較するので、あなたはそれを得る

while ((fgets(word, 46, dic)) != NULL) 
0

while ((fgets(word, 46, dic)) != feof) 

を変更してください。あなたはおそらくfeof(fp)またはおそらくEOFと書くことを意味しました。

どちらも間違っています。fgetsはエラー時にNULLを返します。

関連する問題