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:- Imprimimos um prompt para o usuário digitar o título (usando
fgets
). - Removemos o
fgets
. - Repetimos para o autor.
- Lemos
codigo
epreco
comscanf
, e consumimos ofgets
.
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;
}