[英]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.