2012-05-06 32 views
2

この関数findBookByTitleは、fpがオープンされていることを想定しており、タイトルが機能するものと一致する場合はタイトルを出力します。タイトルは一意であるとみなされますので、一度一致すると検索が停止します。私の問題は、ファイル内の何かにタイトルをマッチさせる方法が完全にはわからないということです。これは私が、私はいくつかのエラーを取得するコンパイル時に私の機能が不完全なままであるが、これらのいくつかは本当に私を混乱させるとして c:ファイルからの読み込み

void findBookByTitle(FILE* fp, char title[]) 
    { 
     FILE * fp = fopen(fp, "r"); 
     while(!EOF && *fp = title){ 
      printf("Title: <%c> \n", title); 
     } 
     if(EOF && *fp != title){ 
      printf("No books match the title: <%c> ", title); 
     } 
    } 

は同様に、これらに対処するために無意味かもしれない...私はこれまで持っているものです。

34:エラー: 'FP' はシンボル 32の別の種類として再宣言:注: 'FP' の以前の定義がここ 34であった。警告:USR互換性のないポインタ型 /から 'のfopen' の通過引数1/'const FILE *'; const:const char * を制限しますが、引数は 'struct FILE *'タイプです。 35:エラー:バイナリへの無効なオペランド& &( 'int'と 'FILE'を持ちます) 38:エラー:バイナリには無効なオペランド!=( 'FILE'と 'char *'を持つ)

+1

あなた必要決して 'FILEの*デリファレンス'。代わりに 'fgets'のような適切なI/O関数を使わなければなりません。 –

答えて

4
  1. あなたの関数はその最初の引数としてFILE *を取るように宣言されたが、それはそれはファイル名だかのようにその引数を処理して開こうに進みFILE *(同じ名前で!)、それを使用して。引数がFILE *char *かどうかを確認し、それに応じてコードを変更してください。

  2. fpでEOFをテストするためにEOFを使用しようとしています。それほど単純ではありません。代わりにfeof(fp)を試してください。

  3. fpからは、*fp = title(および*fp != title)を使用しています。これはまったく意味がありません。 fgetsまたはfscanfのように、ファイルポインタから読み取る関数を使用する必要があります。あなたはオプション%c

  4. EOFFILE *pt二回
  5. あなたは文字列でFILEポインタを比較することはできません(char *
  6. あなたは出力できない文字列が-1である必要があり

0

ファイルポインタの値をapで上書きしています(*fp = title)のような代入を使用すると、charに渡されます。その後、あらゆる種類の問題が発生します。すでにFILE * fpはオープンするファイルの名前ではありません持っているので

FILE * fp = fopen(fp, "r"); 

はおそらくも行を削除する必要があります。既に開いているファイルです。

0
  1. EOF0である場合、EOFが変更されない場合、の場合はこれが真となります
  2. あなたのアルゴリズムは、(これまでのところ、私はあなたの問題を理解しました)右のコードは右でなければなりません

奇妙です:

#include <stdio.h> 
#include <string.h> 

void findBookTitle(char *path, char **title, int titles) { 
    FILE *fp = fopen(path, "r"); 
    char line[100]; 
    int i = 0, count = 0; 
    while (fgets(line, 100, fp) != NULL) { 
     while (i < titles) 
      if (!strcmp(title[i], line)) { 
       printf("Title: <%s>\n", line); 
       count++; 
      } 
     i = 0; 
    } 
    if (!count) 
     printf("No books found.\n"); 
} 
関連する問題