2012-05-06 5 views
2

В этой функции findBookByTitle то, что должно случиться, открывается fp, и если название совпадает с именем, заданным для функции, оно напечатает заголовок. Предполагается, что названия уникальны, поэтому, если совпадение найдено, это может остановить поиск. Моя проблема в том, что я не совсем уверен, как совместить название с чем-то в файле. Это то, что я до сих пор ...c: чтение из файлов

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: предупреждение: проходя аргумент 1 из 'FOPEN' от несовместимого типа указателя /USR/include/stdio.h: 251: note: expected 'const char * Ограничить', но аргумент имеет тип 'struct FILE *' 35: ошибка: недопустимые операнды в двоичном формате & & (есть 'int' и 'FILE'). 38: ошибка: недопустимые операнды для двоичных! = (Есть 'FILE' и 'char *')

+1

Вы никогда не должны разыменовывать '' FILE *. Вы должны использовать правильные функции ввода-вывода, такие как 'fgets'. –

ответ

4
  1. Ваша функция объявлена ​​как принимать FILE * в качестве первого аргумента, но затем переходит к рассматривать этот аргумент, как будто это имя файла и попытаться открыть другойFILE * (с тем же именем!), Используя его , Решите, является ли аргумент FILE * или char *, и измените свой код соответствующим образом.

  2. Вы пытаетесь использовать EOF для проверки EOF на fp. Это не так просто. Вместо этого попробуйте feof(fp).

  3. Вы пытаетесь прочитать от fp с помощью *fp = title*fp != title). Это не имеет никакого смысла. Вам нужно использовать функцию для чтения из указателя файла, например fgets или fscanf.

0

Вы переписываете значение в указателе файла с помощью ap ointer к символу, когда вы используете такое назначение (*fp = title). После этого будут возникать всевозможные проблемы.

Вы, вероятно, также необходимо удалить строку:

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

Поскольку у вас уже есть FILE * Ф.П. не имя файла, чтобы открыть. Это уже открытый файл.

0
  1. Вы FILE *pt дважды
  2. Вы не можете сравнить FILE указатель со строкой (char *)
  3. Вы можете не выводить строки с параметром %c
  4. EOF является -1 и с оператором ! это верно, если EOF - 0, но EOF никогда не изменится
  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"); 
}