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 * restrict '但参数的类型是'struct FILE *' 35:错误:二进制&&的操作数无效(有'int'和'FILE')38:错误:二进制操作数无效!=(有 'FILE' 和 'char *')

4

3 回答 3

4
  1. 您的函数被声明为将 aFILE *作为其第一个参数,但随后它继续将该参数视为文件名并尝试使用它打开另一个 FILE *(同名!)。确定参数是 aFILE *还是 a char *,并相应地更改代码。

  2. 您正在尝试EOF使用fp. 这不是那么简单。试试feof(fp)吧。

  3. fp您正在尝试使用*fp = title(and *fp != title)读取。这根本没有任何意义。您需要使用函数来读取文件指针,例如fgetsor fscanf

于 2012-05-06T16:51:04.683 回答
0

当您使用这样的赋值 ( *fp = title) 时,您正在用指向 char 的指针覆盖文件指针中的值。之后各种问题都会发生。

您可能还需要删除该行:

   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并且对于操作符!,如果EOFis是真的,0EOF永远不会改变
  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 回答