O sistema de uma biblioteca online deve ser capaz de procurar um dado livro pelo o seu título ou por parte dele. Dessa forma, desenvolva um programa para registrar 6 livros no sistema. O programa deve solicitar ao usuário o título (ou parte dele) do livro a ser buscado e imprimir o resultado da busca com todos os dados do livro em questão. Cada livro é armazenado com o seu título (máximo de 50 caracteres), autor (máximo de 30 caracteres), código e preço.

Passo 1

O enunciado pede um programa em C que armazene 6 livros (cada um com título, autor, código e preço) e depois permita ao usuário digitar uma palavra ou parte de título para buscar. Para resolver, vamos definir uma struct para o livro, ler os 6 registros, ler a string de busca e usar a função strstr para encontrar correspondências parciais no título.

Passo 2

Definimos uma struct Livro com:
  • char titulo[51];
  • char autor[31];
  • `int codigo;
  • `float preco;
Incluímos também <string.h> para usar strstr (busca de substring) e <stdio.h> para entrada/saída.

Passo 3

No main, declaramos um vetor Livro biblioteca[6]; e, em um loop de 0 a 5:
  1. Imprimimos um prompt para o usuário digitar o título (usando fgets).
  2. Removemos o armazenado por fgets.
  3. Repetimos para o autor.
  4. Lemos codigo e preco com scanf, e consumimos o pendente no buffer antes do próximo fgets.

Passo 4

Depois de ler os 6 livros, solicitamos ao usuário a string de busca (até 50 caracteres), lemos com fgets e removemos o .

Passo 5

Percorremos o vetor de livros e, para cada um, usamos
if (strstr(biblioteca[i].titulo, busca) != NULL)
para checar se a busca aparece em titulo. Se sim, imprimimos todos os dados desse livro. Se nenhum for encontrado, informamos “Nenhum livro encontrado”.

Passo 6

Encerramos o programa depois de exibir os resultados.

Resposta

#include <stdio.h>
#include <string.h>

typedef struct {
 char titulo[51];
 char autor[31];
 int codigo;
 float preco;
} Livro;

int main() {
 Livro biblioteca[6];
 char buffer[100];
 int i, achou \(=0\);

 // Leitura dos 6 livros
 for (i \(=0\); i < 6; i\(++\)) {
 printf("Livro %d
", i \(+1\));

 printf("Título: ");
 fgets(biblioteca[i].titulo, sizeof(biblioteca[i].titulo), stdin);
 biblioteca[i].titulo[strcspn(biblioteca[i].titulo, "
")] = '\0';

 printf("Autor: ");
 fgets(biblioteca[i].autor, sizeof(biblioteca[i].autor), stdin);
 biblioteca[i].autor[strcspn(biblioteca[i].autor, "
")] = '\0';

 printf("Código: ");
 scanf("%d", &biblioteca[i].codigo);

 printf("Preço: ");
 scanf("%f", &biblioteca[i].preco);

 // limpa o '
' restante no buffer
 fgets(buffer, sizeof(buffer), stdin);

 printf("
");
 }

 // Leitura da string de busca
 printf("Digite parte do título para buscar: ");
 fgets(buffer, sizeof(buffer), stdin);
 buffer[strcspn(buffer, "
")] = '\0';

 // Busca e impressão de resultados
 printf("
Resultados da busca por \"%s\":
", buffer);
 for (i \(=0\); i < 6; i\(++\)) {
 if (strstr(biblioteca[i].titulo, buffer) != NULL) {
 achou \(=1\);
 printf("------------------------------
");
 printf("Título : %s
", biblioteca[i].titulo);
 printf("Autor : %s
", biblioteca[i].autor);
 printf("Código : %d
", biblioteca[i].codigo);
 printf("Preço : R$ %.2f
", biblioteca[i].preco);
 }
 }

 if (!achou) {
 printf("Nenhum livro encontrado.
");
 }

 return 0;
}

Exercícios relacionados