Ir ao conteúdo
  • Cadastre-se

C Cadastro de livros usando vetor em C


Posts recomendados

Fala galera to precisando de um help aqui, tenho que fazer um programa em C que leia dados de livros, e armazene num vetor de tamanho 25, o programa tambem deve exibir uma mensagem de tamanho maximo ao atingir o limite do vetor, deve tambem permitir ao usuario fazer uma busca por um livro utilizando o titulo do livro e caso encontrado exibir os dados do livro, livro que sera um struct como titulo tendo o maximo de 25 letras, autor no maximo 20 e o ano, deve-se tambem organizar um menu oferecendo as opções citadas, bem eu tentei fazer mas ele le o primeiro titulo e pula para o proximo titulo ignorando os campos de autor e ano, alguem pode me ajudar?

#include <stdio.h>
#include <stdlib.h>

struct livro{
    char titulo[35];
    char autor[20];
    int ano;
};

struct livro livros[25];

void procura(char titulo[]){
    for(int i=0;i<25;i++){
        if(strcmp(livros[i].titulo,titulo)==0){
            printf("%s",livros[i].titulo);
            printf("%s",livros[i].autor);
            printf("%d",livros[i].ano);
        }else{
            printf("Livro não encontrado");
        }
    }
}

int main(){
    int op,i;
    char tit[35];
    printf("\n===== Livraria =====");
    printf("\n 1-Cadastrar livro ");
    printf("\n 2-procurar livro ");
    printf("\n 3-Sair \n");
    scanf("%d",&op);

    switch(op){
        case 1:
        for(i=0;i<25;i++){
            printf("Titulo: ");
            scanf("%s",&livros[i].titulo);
            printf("Autor: ");
            scanf("%s",&livros[i].autor);
            printf("Ano: ");
            scanf("%d",&livros[i].ano);
            if(i==25){
                printf("Tamanho do vetor atingido");
            }
        }
        break;
        case 2:
            printf("Qual o titulo do livro que deseja buscar: ");
            scanf("%s",&tit);
            procura(tit);
        break;
        case 3:
            exit(1);
    }
}


 

Link para o comentário
Compartilhar em outros sites

@KXSY GCC to no Ubuntu 18.04

 

adicionado 0 minutos depois

@KXSY Ponteiro? eu ainda não tive ponteiros não sabia dessa

adicionado 3 minutos depois

Eu tentei alterar um pouco a logica usando o fgets no lugar do scanf e usando o getchar, mas ele ainda pula o ano

#include <stdio.h>
#include <stdlib.h>

struct livro{
    char titulo[35];
    char autor[20];
    int ano;
};

struct livro livros[25];

void procura(char titulo[]){
    for(int i=0;i<25;i++){
        if(strcmp(livros[i].titulo,titulo)==0){
            printf("%s",livros[i].titulo);
            printf("%s",livros[i].autor);
            printf("%d",livros[i].ano);
        }else{
            printf("Livro não encontrado");
        }
    }
}

int main(){
    int op,i;
    char tit[35];
    printf("\n===== Livraria =====");
    printf("\n 1-Cadastrar livro ");
    printf("\n 2-procurar livro ");
    printf("\n 3-Sair \n");
    scanf("%d",&op);

    switch(op){
        case 1:
        for(i=0;i<25;i++){
            printf("\nTitulo: ");
            fgets(livros[i].titulo,35,stdin);
            getchar();
            printf("\nAutor: ");
            fgets(livros[i].autor,20,stdin);
            getchar();
            printf("\nAno: ");
            scanf("%d",&livros[i].ano);
            if(i==25){
                printf("Tamanho do vetor atingido");
            }
        }
        break;
        case 2:
            printf("Qual o titulo do livro que deseja buscar: ");
            scanf("%s",&tit);
            procura(tit);
        break;
        case 3:
            exit(1);
    }
}

 

Link para o comentário
Compartilhar em outros sites

@KXSY O que seria numeros magicos? o prof ainda não nos deu constantes, ele deu funçao, psedocodigo,laço, voltou para floxograma,struct e vetor e voltou a pseudocodigo/portugol o proximo assunto e ponteiro

adicionado 1 minuto depois

@KXSY Mas voltando a questão por que ainda não esta funcionando troquei o scanf pelo fgets que me recomendaram, mas agora ele le so titulo e autor e pula o ano

Link para o comentário
Compartilhar em outros sites

1 hora atrás, KXSY disse:

@lucas.suanderhus Oi, você está usando qual compilador?

O erro foi em colocar o operador & em uma string que já e um ponteiro.

Todo vetor já e um ponteiro, então não se faz o uso do &.

 

Aqui também você cometeu o mesmo erro.

 

a logica do programa está boa só falta colocar tudo em loop para não parar de repente.

adicionado 0 minutos depois

Eu esqueci de mencionar que você usou a função strcmp e não colocou a biblioteca string.h

Tirei os & não deu certo tambem, na verdade agora ele pulou o campo autor agora tambem lo le o titulo e pula os outros

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!