簡體   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