在这个函数中,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 *')
答案 0 :(得分:4)
您的函数被声明为将FILE *
作为其第一个参数,但它会继续将该参数视为文件名并尝试打开另一个 {{ 1}}(使用相同的名称!)使用它。请确定参数是FILE *
还是FILE *
,并相应地更改代码。
您正尝试使用char *
在EOF
上测试EOF。它并不那么简单。请改为fp
。
您正尝试使用feof(fp)
(和fp
)来阅读*fp = title
。这根本没有任何意义。您需要使用函数来读取文件指针,例如*fp != title
或fgets
。
答案 1 :(得分:0)
当您使用类似(*fp = title
)的赋值时,您将使用指向char的指针覆盖文件指针中的值。之后会发生各种各样的问题。
您可能还需要删除该行:
FILE * fp = fopen(fp, "r");
由于您已经有FILE *
fp,因此不是要打开的文件的名称。这是一个已打开的文件。
答案 2 :(得分:0)
FILE *pt
两次FILE
指针与字符串(char *
)%c
EOF
为-1
,如果!
为EOF
但0
永不改变正确的代码应该是正确的(到目前为止我已经理解了你的问题):
#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");
}