繁体   English   中英

c:从文件读取

[英]c: reading from files

在此函数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传递'fopen'的参数1:251 :注意:预期为'const char * strict ',但参数的类型为'struct FILE *'35:错误:无效的操作数为二进制&&(具有'int'和'FILE')38:错误:无效的操作数为二进制!=(具有“ FILE”和“ char *”)

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

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

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

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

您可能还需要删除以下行:

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

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

  1. 您有两次FILE *pt
  2. 您不能将FILE指针与字符串( char * )进行比较
  3. 您无法使用%c选项输出字符串
  4. EOF-1且与运算符! 如果EOF0EOF永远不会改变,则为true
  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");
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM