c:从文件中读取

时间:2012-05-06 16:45:19

标签: c file

在这个函数中,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:警告:从不兼容的指针类型传递'fopen'的参数1 /usr/include/stdio.h:251:注意:预期'const char * restrict '但参数的类型为'struct FILE *' 35:错误:无效操作数到二进制&amp;&amp; (有'int'和'FILE') 38:错误:二进制操作数无效!=('FILE'和'char *')

3 个答案:

答案 0 :(得分:4)

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

  2. 您正尝试使用char *EOF上测试EOF。它并不那么简单。请改为fp

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

答案 1 :(得分:0)

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

您可能还需要删除该行:

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

由于您已经有FILE * fp,因此不是要打开的文件的名称。这是一个已打开的文件。

答案 2 :(得分:0)

  1. 您有FILE *pt两次
  2. 您无法将FILE指针与字符串(char *
  3. 进行比较
  4. 您无法使用选项%c
  5. 输出字符串
  6. EOF-1,如果!EOF0永不改变EOF >
  7. 你的算法很奇怪
  8. 正确的代码应该是正确的(到目前为止我已经理解了你的问题):

    #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");
    }