Задание: В библиотеке имеется список книг. Каждая запись этого списка содержит фамилии авторов, название книг, год издания. Определить, имеются ли в данном списке книги, в названии которых встречается некоторое ключевое слово (например, "ПЭВМ"). Если имеются, то выдать на печать фамилии авторов, название и год издания всех таких книг.
Листинг программы. #include <stdio.h>//библиотека стандартного ввода и вывода #include <conio.h>//консольный ввод-вывод #include <stdlib.h>//функции, занимающиеся выделением памяти, контроль процесса выполнения программы, преобразования типов и другие #include <locale.h>//нформациюя о текущей кодировке для форматирования чисел #include <string.h>//работа со строками
#define max 100 //Задаем максимальное кол-во символов для записи книги и автора
struct info{ char book[max]; char author[max]; int year; }; // Создаем структуру для записи книги, автора и года издания книги.
struct info catalog[10]; //массив структур для создания списка книг
int main() { //Объявляем необходимые переменные. int i; int records=0; char pattern[max]; char *isstr; //указатель на строку //формируем список книг do { printf("Book number: %d \n", records+1); // вводим информация о книге номер records+1 puts("Enter author`s name:"); fflush(stdin); // очищаем содержимое буфера перед записью значения gets(catalog[records].author);//записываем имя автора в поле author в структуре catalog[records] puts("Enter book`s name:"); fflush(stdin); gets(catalog[records].book);// записываем название книги в поле book в структуре catalog[records] puts("Enter issue year for book:"); fflush(stdin); scanf("%d",&catalog[records].year);// записываем год книги в поле year в структуре catalog[records] records++; puts("Please, press 1 to continue or 0 to exit..");// продолжить (1) или выйти (0) scanf("%d", &i); if (records==10) i=0; // т.к. массив состоит из 10-ти структур, то выйти после того, как сформируем список из 10 записей puts("-----------------------------"); } while (i);
printf("%15s %15s %4s\n", "The author", "The book", "Year"); for (i=0;i<records;i++) //выводим весь каталог на экран { printf("%15s %15s %4d\n", catalog[i].author, catalog[i].book, catalog[i].year); } fflush(stdin); puts("-----------------------------"); puts("Enter pattern for search:"); gets(pattern); // вводим шаблон для поиска
printf("%15s %15s %4s\n", "The author", "The book", "Year"); for (i=0;i<records;i++) { isstr=strstr(catalog[i].book,pattern); // ищем подстроку в строке if ( isstr != NULL ) { printf("%15s %15s %4d\n", catalog[i].author, catalog[i].book, catalog[i].year); // если есть совпадение, то выводим на экран. } }
puts("Enter any key..."); getchar(); return 0; // выход из программы }