Описать структуру "Библиотека" - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Подскажите, задача звучит следующим образом: Дан массив структур. Каждая структура содержит информацию о книгах в библиотеке (придумать 5 полей структуры). Ввести с клавиатуры букву. Вывести на экран списки книг, заканчивающиеся выделенной буквой. Реализовать, используя указатели.
# 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---------------------------------------------------------"); 
   }
Мы ввели структуру. Реализовать с помощью указателей это я так понимаю, можно сделать динамическую структуру данных? Как вариант. Дальше я не знаю, как сравнить введенную букву с последней буквой названия. я так понимаю, что-то там должно быть "-1", но через что это записать. Подскажите, где об этом можно более подробно почитать, в разделе о строках или где-то еще?
Сорри не исправила
//--------------- Вывод всех записей на экран ------------------//
        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;
 
}

Объяснение кода листинга программы

  1. Включаем необходимые заголовочные файлы: , , , .
  2. Определяем структуру Библиотека с полями: nazvanie (название книги), avtor (автор книги), god (год издания), kol_str (количество страниц), izdanie (издание).
  3. В функции main() выделяем память под массив структур Biblioteka с помощью malloc().
  4. Запускаем цикл заполнения библиотеки, в котором с помощью scanf() заполняем поля каждой структуры.
  5. Выводим все записи на экран с помощью цикла for и функции printf().
  6. Запрашиваем у пользователя ввод буквы для поиска книги, которая заканчивается на эту букву.
  7. Проверяем каждую структуру на совпадение последней буквы названия с заданной буквой.
  8. Если совпадение найдено, выводим запись на экран и устанавливаем флаг pr=1.
  9. Если после проверки всех записей совпадение не найдено, выводим сообщение об отсутствии книг, которые заканчиваются на заданную букву.
  10. Освобождаем память с помощью функции free().
  11. Возвращаем 0 из функции main(), что означает успешный конец работы программы.

Оцени полезность:

5   голосов , оценка 3.8 из 5