[英]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 *”)
您的函数被声明为以FILE *
作为其第一个参数,但是随后继续将该参数当作文件名对待,并尝试使用它打开另一个 FILE *
(具有相同名称!)。 确定该参数是FILE *
还是char *
,并相应地更改代码。
您正在尝试使用EOF
来测试对EOF fp
。 这不是那么简单。 尝试使用feof(fp)
。
您正在尝试使用*fp = title
(和*fp != title
)从fp
读取。 这根本没有任何意义。 您需要使用函数来读取文件指针,例如fgets
或fscanf
。
使用此类赋值( *fp = title
)时,您将使用指向char的指针覆盖文件指针中的值。 之后,各种问题都会发生。
您可能还需要删除以下行:
FILE * fp = fopen(fp, "r");
由于您已经有一个FILE *
fp不是要打开的文件的名称。 这是一个已打开的文件。
FILE *pt
FILE
指针与字符串( char *
)进行比较 %c
选项输出字符串 EOF
为-1
且与运算符!
如果EOF
为0
但EOF
永远不会改变,则为true 正确的代码应该是正确的(到目前为止,我已经理解了您的问题):
#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.