Другие языки программирования и технологии

Помогите пожалуйста решить задачу на C.

Дан файл bibl, содержащий сведения о книгах. Сведения о каждой из книг – это фамилия автора, название и год издания.
а) Найти названия книг данного автора, изданных с 1960 года.
б) Определить, имеется ли книга с названием “Информатика”. Если да, то сообщить фамилию автора и год издания. Если таких книг несколько, то сообщить имеющееся сведения обо всех этих книгах.
Это одна из самых полноценных программ, что я сюда писала

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <memory.h>

#define stringSize 256
typedef struct BOOK_s{
char surname[stringSize];
char bookname[stringSize];
unsigned year;
} BOOK;

typedef struct LIBRARY_S{
BOOK* books;
size_t size;
size_t maxSize;
} LIBRARY;

LIBRARY initLibrary(void);
void closeLibrary(LIBRARY*);
void addBook(LIBRARY*, BOOK*);
void findBooksByName(LIBRARY*, BOOK***, size_t* n, const char* bookname);
void findBooksByAuthor(LIBRARY*, BOOK***, size_t* n, const char* author);

int main(int argv, const char** argc){
char author[stringSize], bookname[stringSize];
unsigned year;

printf("Введите фамилию автора и год: ");
scanf("%s %u", author, &year);
printf("Введите название книги: ");
scanf("%s", bookname);
printf("\n");

FILE* f = fopen("bibl.txt", "r");

if(!f){
printf("Невозможно открыть файл\n");
return 0;
}

LIBRARY lib = initLibrary();
BOOK tmpBook;

while(!feof(f)){
fscanf(f, "%s %s %u", tmpBook.surname, tmpBook.bookname, &tmpBook.year);
addBook(&lib, &tmpBook);
}

BOOK** books = NULL;
size_t size;

findBooksByAuthor(&lib, &books, &size, author);
printf("Все книги автора %s с %u года: \n", author, year);
for(size_t i = 0; i < size; i++){
if(books[i]->year > year)
printf("%s %s %u\n", books[i]->surname, books[i]->bookname, books[i]->year);
}
printf("\n");

findBooksByName(&lib, &books, &size, bookname);
printf("Все книги под названием \"%s\":\n", bookname);
for(size_t i = 0; i < size; i++){
printf("%s %s %u\n", books[i]->surname, books[i]->bookname, books[i]->year);
}
printf("\n");

free(books);
closeLibrary(&lib);
fclose(f);
return 0;
}

LIBRARY initLibrary(){
LIBRARY lib;
lib.maxSize = 1;
lib.size = 0;
lib.books = (BOOK*)calloc(lib.maxSize, sizeof(BOOK));
return lib;
}

void resizeLibrary(LIBRARY* lib){
size_t newSize = lib->maxSize * 2;
BOOK* newBooks = (BOOK*)realloc(lib->books, newSize * sizeof(BOOK));
if(newBooks != NULL){
lib->books = newBooks;
lib->maxSize = newSize;
}
}

void closeLibrary(LIBRARY* lib){
lib->maxSize = 0;
lib->size = 0;
free(lib->books);
}

void addBook(LIBRARY* lib, BOOK* book){
if(lib->maxSize - 1 == lib->size) resizeLibrary(lib);
strcpy(lib->books[lib->size].surname, book->surname);
strcpy(lib->books[lib->size].bookname, book->bookname);
lib->books[lib->size].year = book->year;
lib->size++;
}

void findBooksByName(LIBRARY* lib, BOOK*** books, size_t* n, const char* bookname){
*n = 0;
if(*books != NULL) free(*books);
(*books) = (BOOK**)calloc(*n, sizeof(BOOK*));

for (size_t i = 0; i < lib->size; i++) {
if(strcmp(lib->books[i].bookname, bookname) == 0){
(*n)++;
(*books) = (BOOK**)realloc((*books), sizeof(BOOK*) * (*n));
(*books)[*n - 1] = &lib->books[i];
}
}
}

void findBooksByAuthor(LIBRARY* lib, BOOK*** books, size_t* n, const char* author){
*n = 0;
if(*books != NULL) free(*books);
(*books) = (BOOK**)calloc(*n, sizeof(BOOK*));

for (size_t i = 0; i < lib->size; i++) {
if(strcmp(lib->books[i].surname, author) == 0){
(*n)++;
Каник Аралов
Каник Аралов
11 157
Лучший ответ
Файл для проверки где брать?
Заур Гамидов
Заур Гамидов
11 084
Иван Сироткин На:
Ivanov I.A.
Information
12.04.03
Petrov A.S.
Literature
02.03.99
Sidorov D.V.
Physics
29.10.87
Vasichkin K.L.
Information
29.10.87