Ir para conteúdo
Fórum Script Brasil
  • 0

Dúvida em struct em C.


Nai

Pergunta

Olá gente, boa noite! ^^

Eu to resolvendo o seguinte exercício:

Pesquise e construa um software que seja capaz de utilizar a estrutura apresentada na Figura 1 para cadastro

de no mínimo 30 livros. Para tanto, combine a estrutura da Figura 1 com um vetor ou uma matriz. Seu software

deve possuir uma estrutura de menus que possibilite ao usuário do software o uso fácil deste, para inclusão,

exclusão, alteração e consulta dos livros.

Eu tive dúvidas em relação ao menu. Por exemplo, quando for incluir algum livro, ele deve ser incluído em um espaço vago, correto? E como vou percorrer a struct pra achar essa 'ficha' vazia?

Excluir talvez eu tenha conseguido fazer, mas por via das dúvidas, tá certinho?

Alterar, acho também que consegui...

aaaagora consulta de livros não sei se tá certo também... :s

bobeiras, né?

Uma ajudinha ia ser muito boom, obrigada ^^

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

int main()
{
    int i, aux=0;


    struct livro
    {
        int codigo;
        char nome[100];
        char autor[100];
        char editora[100];
        int ano;
        float preço;
    }livro;

    struct livro l[30];

    int menu, aux_cod;
    char condicao;


    do
    {
    do
    {
        printf("Menu de opcoes:\n");
        printf("1- Incluir livro\n");
        printf("2- Excluir livro\n");
        printf("3- Alterar livro\n");
        printf("4- Consulta de livro\n");
    }while((menu<1) || (menu>4));

    switch (menu)
    {
        case 1:
        printf("Digite o codigo:\n");
        scanf("%d",&l[i].codigo);
        fflush(stdin);
        printf("Digite o nome do livro:\n");
        scanf("%s",&l[i].nome);
        fflush(stdin);
        printf("Digite o nome do autor:\n");
        scanf("%s",&l[i].autor);
        fflush(stdin);
        printf("Digite a editora do livro:\n");
        scanf("%s",&l[i].editora);
        fflush(stdin);
        printf("Digite o ano do livro:\n");
        scanf("%d",&l[i].ano);
        printf("Digite o preço do livro:\n");
        scanf("%f",&l[i].preço);
        break;


        case 2:
        printf("Digite o codigo do livro:\n");
        scanf("%d",&aux_cod);
            //Procura o código do livro pela posição que ele se encontra. Quando encontrado,
            //todos os dados serão apagados
        for(i=0;i<30;i++)
        {
            if(l[i].codigo==aux_cod)
            {
                l[i].codigo=0;
                l[i].nome='';
                l[i].autor='';
                l[i].editora='';
                l[i].ano=0;
                l[i].preço=0;
                printf("Dados excluídos com sucesso.");
            }
        }
        break;

        case 3:
        printf("Digite o codigo do livro:\n");
        scanf("%d",&aux_cod);

        printf("Digite o codigo:\n");
        scanf("%d",&l[aux_cod].codigo);
        fflush(stdin);
        printf("Digite o nome do livro:\n");
        scanf("%s",&l[aux_cod].nome);
        fflush(stdin);
        printf("Digite o nome do autor:\n");
        scanf("%s",&l[aux_cod].autor);
        fflush(stdin);
        printf("Digite a editora do livro:\n");
        scanf("%s",&l[aux_cod].editora);
        fflush(stdin);
        printf("Digite o ano do livro:\n");
        scanf("%d",&l[aux_cod].ano);
        printf("Digite o preço do livro:\n");
        scanf("%f",&l[aux_cod].preço);
        break;


        case 4:
        printf("Os livros são:\n");
        for(i=0;i<30;i++)
        {
            printf("%d ", l[i].codigo);
            printf("%s ", l[i].nome);
            printf("%s ", l[i].autor);
            printf("%s ", l[i].editora);
            printf("%d ", l[i].ano);
            printf("%f ", l[i].preço);
            printf("\n\n");
        }




    }
        printf("Deseja realizar mais alguma operação?\n\nS- Sim N- não\n");
        scanf("%c",&condicao);

    }while(condicao=='s' || condicao=='S');




    return 0;
}

Link para o comentário
Compartilhar em outros sites

4 respostass a esta questão

Posts Recomendados

  • 0

Ola,

1) Referente a leitura de uma string, utilize fgets e não scanf. Fgets le uma string mesmo contendo espaço em branco entre elas:

Ex: "Programa em c".

2)Referente a inserção de valores dentro do seu vetor, é muito simples é só incrementar no final da opção 1 após preencher os dados. Por exemplo, seu vetor começa em 0 e vai até 29, logo apos você preencher a primeira posição do vetor(zero) ele incrementa +1, sendo que a proxima vez que você for cadastrar irá para a posição 1,e assim em diante até o final do seu vetor.

Exemplo:

switch (menu)
    {
        case 1:
        printf("Digite o codigo:\n");
        scanf("%d",&l[i].codigo);
        fflush(stdin);
        printf("Digite o nome do livro:\n");
        fgets("%s",&l[i].nome);
        fflush(stdin);
        printf("Digite o nome do autor:\n");
        fgets("%s",&l[i].autor);
        fflush(stdin);
        printf("Digite a editora do livro:\n");
        fgets("%s",&l[i].editora);
        fflush(stdin);
        printf("Digite o ano do livro:\n");
        scanf("%d",&l[i].ano);
        printf("Digite o preço do livro:\n");
        scanf("%f",&l[i].preço);
        i++;
         break;
         }
3) Referente a exclusão de um elemento de um vetor: Tecnicamente é impossível não deixar espaço em branco... Mesmo que você mova as posições seguintes para frente, vai ficar um espaço em branco na última posição.Pegue a posição do elemento que quer tirar, sobrescreva-o com seu elemento seguinte, e vá fazendo este processo até chegar ao final do vetor. Não precisamos "apagar" o valor do "i" elemento pois ele não será exibido. E devemos subtrair 1 da variável "i" pois removemos 1 elemento. O loop do j percorre até i-1 pois dentro do loop acessamos o elemento seguinte ao contador. Não esqueça de declarar a variável j! Exemplo:
printf("Digite o codigo do livro:\n");
scanf("%d",&aux_cod); 

for(i=0;i<30;i++)
{

     if(l[i].codigo==aux_cod)
    {
       for(j=i; j<30-1; j++)
          l[j].codigo = l[j+1].codigo;
       i--;
    }
    printf("codigo = %d\n",l[i].codigo);
}
4)Alteração: Pelo o que eu vi ali, acho que está correto,caso esteje errado, peço ajuda de algum colega do fórum. 5) Referente a consulta.Você quer listar todos os livros cadastrados dentro do vetor? ou quer listar apenas o livro de codigo igual ao que for digitado pelo usuario. Se for listar todos, faça assim:
case 4:
        printf("Os livros são:\n");
        for(i=0;i<30;i++)
        {
            printf("%d ", l[i].codigo);
            printf("%s ", l[i].nome);
            printf("%s ", l[i].autor);
            printf("%s ", l[i].editora);
            printf("%d ", l[i].ano);
            printf("%f ", l[i].preço);
            printf("\n\n");
        }
Caso queira apenas o que o usuario digitar, faça assim:
case 4:
        printf("Digite codigo do livro que deseja consultar:\n");
        scanf("%d",&codlivro); // não esqueça de declarar alguma variavel para poder ler aqui dentro do scanf.

        for(i=0;i<30;i++)
        {
            if(l[i].codigo == codlivro)
            { 
                 printf("%d ", l[i].codigo);
                 printf("%s ", l[i].nome);
                 printf("%s ", l[i].autor);
                 printf("%s ", l[i].editora);
                 printf("%d ", l[i].ano);
                 printf("%f ", l[i].preço);
                 printf("\n\n");
            } 
           else
           {
               printf("Livro não foi encontrado.Verifique");
           } 
        }
      break;

Editado por Prog_Junior
Link para o comentário
Compartilhar em outros sites

  • 0
Ola,

1) Referente a leitura de uma string, utilize fgets e não scanf. Fgets le uma string mesmo contendo espaço em branco entre elas:

Ex: "Programa em c".

2)Referente a inserção de valores dentro do seu vetor, é muito simples é só incrementar no final da opção 1 após preencher os dados. Por exemplo, seu vetor começa em 0 e vai até 29, logo apos você preencher a primeira posição do vetor(zero) ele incrementa +1, sendo que a proxima vez que você for cadastrar irá para a posição 1,e assim em diante até o final do seu vetor.

Exemplo:

switch (menu)
    {
        case 1:
        printf("Digite o codigo:\n");
        scanf("%d",&l[i].codigo);
        fflush(stdin);
        printf("Digite o nome do livro:\n");
        fgets("%s",&l[i].nome);
        fflush(stdin);
        printf("Digite o nome do autor:\n");
        fgets("%s",&l[i].autor);
        fflush(stdin);
        printf("Digite a editora do livro:\n");
        fgets("%s",&l[i].editora);
        fflush(stdin);
        printf("Digite o ano do livro:\n");
        scanf("%d",&l[i].ano);
        printf("Digite o preço do livro:\n");
        scanf("%f",&l[i].preço);
        i++;
         break;
         }
3) Referente a exclusão de um elemento de um vetor: Tecnicamente é impossível não deixar espaço em branco... Mesmo que você mova as posições seguintes para frente, vai ficar um espaço em branco na última posição.Pegue a posição do elemento que quer tirar, sobrescreva-o com seu elemento seguinte, e vá fazendo este processo até chegar ao final do vetor. Não precisamos "apagar" o valor do "i" elemento pois ele não será exibido. E devemos subtrair 1 da variável "i" pois removemos 1 elemento. O loop do j percorre até i-1 pois dentro do loop acessamos o elemento seguinte ao contador. Não esqueça de declarar a variável j! Exemplo:
printf("Digite o codigo do livro:\n");
scanf("%d",&aux_cod); 

for(i=0;i<30;i++)
{

     if(l[i].codigo==aux_cod)
    {
       for(j=i; j<30-1; j++)
          l[j].codigo = l[j+1].codigo;
       i--;
    }
    printf("codigo = %d\n",l[i].codigo);
}
4)Alteração: Pelo o que eu vi ali, acho que está correto,caso esteje errado, peço ajuda de algum colega do fórum. 5) Referente a consulta.Você quer listar todos os livros cadastrados dentro do vetor? ou quer listar apenas o livro de codigo igual ao que for digitado pelo usuario. Se for listar todos, faça assim:
case 4:
        printf("Os livros são:\n");
        for(i=0;i<30;i++)
        {
            printf("%d ", l[i].codigo);
            printf("%s ", l[i].nome);
            printf("%s ", l[i].autor);
            printf("%s ", l[i].editora);
            printf("%d ", l[i].ano);
            printf("%f ", l[i].preço);
            printf("\n\n");
        }
Caso queira apenas o que o usuario digitar, faça assim:
case 4:
        printf("Digite codigo do livro que deseja consultar:\n");
        scanf("%d",&codlivro); // não esqueça de declarar alguma variavel para poder ler aqui dentro do scanf.

        for(i=0;i<30;i++)
        {
            if(l[i].codigo == codlivro)
            { 
                 printf("%d ", l[i].codigo);
                 printf("%s ", l[i].nome);
                 printf("%s ", l[i].autor);
                 printf("%s ", l[i].editora);
                 printf("%d ", l[i].ano);
                 printf("%f ", l[i].preço);
                 printf("\n\n");
            } 
           else
           {
               printf("Livro não foi encontrado.Verifique");
           } 
        }
      break;

Muuuuuuito obrigada, Prog_Junior! Consegui fazer tudo certinho, obrigada ^^

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...