2

この関数でfindBookByTitleが発生するのは、fpが開かれ、タイトルが関数に指定されたものと一致する場合、タイトルが出力されることです。タイトルは一意であると想定されているため、一致するものが見つかると検索を停止できます。私の問題は、タイトルをファイル内の何かに一致させる方法が完全にわからないことです。これは私がこれまでに持っているものです...

    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/include/stdio.h:251から「fopen」の引数1を渡します:注:期待される'const char* strict 'が引数のタイプは'structFILE *'35:エラー:バイナリへのオペランドが無効です&&('int'および'FILE'があります)38:エラー:バイナリへのオペランドが無効です!=( 'FILE'と'char*'があります)

4

3 に答える 3

4
  1. 関数は最初の引数として a を取ると宣言されていますが、その後、その引数をファイル名であるかのように扱い、それを使用して別の(同じ名前で!) をFILE *開こうとします。引数が aか aかを判断し、それに応じてコードを変更してください。 FILE *FILE *char *

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

  3. (and )fpを使用してから読み取ろうとしています。これはまったく意味がありません。またはなどの関数を使用して、ファイル ポインターから読み取る必要があります。*fp = title*fp != titlefgetsfscanf

于 2012-05-06T16:51:04.683 に答える
0

そのような割り当てを使用すると、ファイルポインターの値がcharへのポインターで上書きされます(*fp = title)。その後、あらゆる種類の問題が発生します。

おそらく次の行も削除する必要があります。

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

すでにFILE *fp があるので、開くファイルの名前ではありません。すでに開いているファイルです。

于 2012-05-06T16:50:02.097 に答える
0
  1. あなたはFILE *pt二度持っています
  2. FILEポインターを文字列 ( char *)と比較することはできません
  3. オプションで文字列を出力することはできません%c
  4. EOFis-1および演算子を使用すると、!is の場合に trueになりますEOF0EOF変更されることはありません
  5. あなたのアルゴリズムは奇妙です

正しいコードは正しいはずです (これまでのところ、私はあなたの問題を理解しています):

#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");
}
于 2012-05-06T18:12:23.957 に答える