Ir ao conteúdo

Posts recomendados

Postado

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);
    }
}


 

Postado

@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);
    }
}

 

Postado

@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

Postado

Entendi esta

adicionado 39 minutos depois

@KXSY Mas ainda não consegui fazer funcionar, tentei trocar o getchar pelo __fpurge(), mas tambem não deu certo, alguma dica, do porque não esta funcionando, to no codigo com fgets

Postado
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

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...