Описать структуру "Библиотека" - C (СИ)
Формулировка задачи:
Подскажите, задача звучит следующим образом:
Дан массив структур. Каждая структура содержит информацию о книгах в библиотеке (придумать 5 полей структуры). Ввести с клавиатуры букву. Вывести на экран списки книг, заканчивающиеся выделенной буквой. Реализовать, используя указатели.
Мы ввели структуру. Реализовать с помощью указателей это я так понимаю, можно сделать динамическую структуру данных? Как вариант. Дальше я не знаю, как сравнить введенную букву с последней буквой названия. я так понимаю, что-то там должно быть "-1", но через что это записать. Подскажите, где об этом можно более подробно почитать, в разделе о строках или где-то еще?
# include <string.h> # include <stdio.h> # include <conio.h> typedef struct biblio { char nazv[50]; char avtor[50]; int god; int str; char izd[50]; }Biblio; int main(void) { Biblio N[50]; int i, j; int n; //----------------введение количества записей---------------// printf("\nVvedite koichestvo zapicei --> "); scanf ("%d",&n); //---------------цикл заполнения библиотеки-----------------// for(i=0;i<n;i++) { printf ("\nVvedite nazvanie --> "); scanf ("%s", &N[i].nazv); printf ("Vvedite avtora --> "); scanf ("%s", &N[i].avtor); printf ("Vvedite god --> "); scanf ("%d", &N[i].god); printf("Vvedite kol-str --> "); scanf ("%d", &N[i].str); printf ("Vvedite izdanie --> "); scanf ("%s", &N[i].izd); } //--------------- Вывод всех записей на экран ------------------// printf("\n---------------------------------------------------------"); printf("\n| Nazvani | Avtor | God | Kol_str| Izdanei |"); printf("\n---------------------------------------------------------"); for(i=0;i<n;i++) { printf("\n|%-15s|%-10s|%-5d|%-8d|%-13s|",& r.nazvanie[i],& r.avtor[i], r.god[i],r.kol_str[i], & r.izdanei[i]); } printf("\n---------------------------------------------------------"); }
Сорри не исправила
//--------------- Вывод всех записей на экран ------------------// printf("\n---------------------------------------------------------"); printf("\n| Nazvani | Avtor | God | Kol_str| Izdanei |"); printf("\n---------------------------------------------------------"); for(i=0;i<n;i++) { printf("\n|%-15s|%-10s|%-5d|%-8d|%-13s|", N[i].nazv, N[i].avtor, N[i].god, N[i].str, N[i].izd); } printf("\n---------------------------------------------------------"); }
Решение задачи: «Описать структуру "Библиотека"»
textual
Листинг программы
# include <string.h> # include <stdio.h> # include <conio.h> # include <stdlib.h> typedef struct biblioteka { char nazvanie[50]; char avtor[50]; int god; int kol_str; char izdanie[50]; }Biblioteka; int main(void) { Biblioteka *mass; int size; int i; char ch; int n; //-------------------введение количества записей-------------------// printf("\nVvedite koichestvo zapicei --> "); scanf ("%d", &size); if ( ( mass = (Biblioteka*)malloc(sizeof(Biblioteka) * size) ) == NULL ){ fprintf(stderr, "Memory error!\n"); return 1; } //---------------цикл заполнения библиотеки-----------------// for(i=0;i<size;i++) { printf ("\nVvedite nazvanie --> "); scanf ("%s", &mass[i].nazvanie); printf ("Vvedite avtora --> "); scanf ("%s", &mass[i].avtor); printf ("Vvedite god --> "); scanf ("%d", &mass[i].god); printf("Vvedite kol-str --> "); scanf ("%d", &mass[i].kol_str); printf ("Vvedite izdanie --> "); scanf ("%s", &mass[i].izdanie); } //--------------- Вывод всех записей на экран ------------------// printf("\n---------------------------------------------------------"); printf("\n| Nazvani | Avtor | God | Kol_str| Izdanei |"); printf("\n---------------------------------------------------------"); for(i=0;i<size;i++){ printf("\n|%-15s|%-10s|%5d|%8d|%-13s|", mass[i].nazvanie, mass[i].avtor, mass[i].god, mass[i].kol_str, mass[i].izdanie); } printf("\n---------------------------------------------------------\n"); printf("\n\n Vvedite bukvu --> "); scanf("%s", &ch); int pr=-1; // Признак совпадения последней буквы с заданной for (i=0; i<=size; i++) { if (mass[i].nazvanie[strlen(mass[i].nazvanie)-1]==ch) //сравнение последней буквы с заданной { pr=1; printf("\n|%-15s|%-10s|%5d|%8d|%-13s|", mass[i].nazvanie, mass[i].avtor, mass[i].god, mass[i].kol_str, mass[i].izdanie); } } if (pr==-1) { printf("\nSlov, kotorie zakanchivaytsia na bukvu -=%c=- net !!!", ch); } free (mass); return 0; }
Объяснение кода листинга программы
- Включаем необходимые заголовочные файлы:
, , , . - Определяем структуру
Библиотека
с полями: nazvanie (название книги), avtor (автор книги), god (год издания), kol_str (количество страниц), izdanie (издание). - В функции main() выделяем память под массив структур Biblioteka с помощью malloc().
- Запускаем цикл заполнения библиотеки, в котором с помощью scanf() заполняем поля каждой структуры.
- Выводим все записи на экран с помощью цикла for и функции printf().
- Запрашиваем у пользователя ввод буквы для поиска книги, которая заканчивается на эту букву.
- Проверяем каждую структуру на совпадение последней буквы названия с заданной буквой.
- Если совпадение найдено, выводим запись на экран и устанавливаем флаг pr=1.
- Если после проверки всех записей совпадение не найдено, выводим сообщение об отсутствии книг, которые заканчиваются на заданную букву.
- Освобождаем память с помощью функции free().
- Возвращаем 0 из функции main(), что означает успешный конец работы программы.