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:
/* 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);
}