Informatică, întrebare adresată de sergheinovac8, 8 ani în urmă

Să se creeze o listă ce conține datele despre cărțile unei biblioteci : titlul, autorul, și numărul de pagini. Să se afișeze lista la ecran. Să se afișeze cărțile scrise de Eminescu.
In limbajul C

Răspunsuri la întrebare

Răspuns de Apollyon
1

Răspuns:
/* doar dacă rulezi programul în Visual Studio ca să poți folosi scanf(...) */

#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

typedef struct Carte

{

 int m_numarPagini;

 char m_Titlu[25];

 char m_Autor[25];

} Carte;

void afiseazaCarte(Carte* carte);

void citesteCartiInVector(Carte* vectorCarti, int cateCarti);

void iesiDinProgram();

int main()

{

/* cate cărți citim și un vector de cărți */

 int cateCarti;

 Carte vectorCarti[50] = {};

 printf("Cate carti adaugi in vector? >> ");

 if ((scanf("%d", &cateCarti)) != 1) {

   /* dacă n-am putut citi cu succes numărul de cărți ieșim din program */

   iesiDinProgram();

 }

/* citim cărțile de la tastatură și le adăugăm în vector */

 citesteCartiInVector(vectorCarti, cateCarti);

/* parcurgem vectorul și afișăm toate cărțile din interiorul bibliotecii */

 printf("Toate cartile din lista bibliotecii:\n");

 for (int i = 0; i < cateCarti; i++) {

   afiseazaCarte(&vectorCarti[i]);

 }

/* parcurgem vectorul, comparăm șirul de caractere din m_Autor cu "Eminescu" cu ajutorul funcției strcmp(...), dacă cele două șiruri sunt egale funcția returnează 0, dacă a returnat 0 afișăm. */

 printf("\nToate cartile scrise de Eminescu din lista bibliotecii:\n");

 for (int i = 0; i < cateCarti; i++) {

   if (strcmp(vectorCarti[i].m_Autor, "Eminescu") == 0) {

     afiseazaCarte(&vectorCarti[i]);

   }

 }

 return 0;

}

void afiseazaCarte(Carte* carte)

{

 printf("\t%s a fost scrisa de %s si are %d pagini!\n", carte->m_Titlu, carte->m_Autor, carte->m_numarPagini);

}

void citesteCartiInVector(Carte* vectorCarti, int cateCarti)

{

 /* parcurgem vectorul*/

 for (int i = 0; i < cateCarti; i++) {

   /* citim titlul cărții care poate să fie format din maxim 24 de caractere (pentru că buffer-ul nostru m_Titlu poate stoca maxim 24 de caractere + '\0'), avem un spațiu înainte de % ca să citim new line-ul rămas în bufferul de input de la scanf-ul precedent (când am citit câte cărți adăugăm în vector).*/

   printf("Introdu titlul cartii >> ");

   if ((scanf(" %24[^\n]s", vectorCarti[i].m_Titlu)) != 1) {

     iesiDinProgram();

   }

   /* aceeași poveste */

   printf("Introdu autorul cartii >> ");

   if ((scanf(" %24[^\n]s", vectorCarti[i].m_Autor)) != 1) {

     iesiDinProgram();

   }

   /* citim și numărul de pagini, valoare pe care o vom adăuga în m_numarPagini*/

   printf("Introdu numarul de pagini >> ");

   if ((scanf("%d", &vectorCarti[i].m_numarPagini)) != 1) {

     iesiDinProgram();

   }

 }

}

void iesiDinProgram()

{

 fprintf(stderr, "Ceva nu a mers bine!\n");

 exit(EXIT_FAILURE);

}

Alte întrebări interesante