Ir ao conteúdo
  • Cadastre-se
Luan BN

C Algoritmo com struct e funções de cadastro listagem e busca.

Recommended Posts

Olá! Preciso de ajuda nesse código. Já procurei vídeos e outros códigos similares mas nada ajudou. A questão é a seguinte:

 

Crie um programa com uma struct para cadastrar itens de uma coleção de
gibis, com os seguintes campos:
codrev int,
descri string[30],
valorestm float.


O programa deverá ter:
Um vetor de pelo menos 4 elementos para cadastrar os itens;
Menu com as opções: cadastrar, listar todos e buscar por codrev.

Para cada opção do menu fazer uma função;

 

Os erros são esses:

 

  • the gets function is dangerous and should not be used.

quando eu mudo de gets para fgets:

  • too few arguments to function fgets.

 

O último erro é na função buscar:

  • segmentation fault (core dumped)

 

Se alguém puder ajudar eu ficaria muito grato.


 

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

#define MAXGIBI 4

typedef struct Gibis
{
    int codrev;
    char descri[30];
    float valorestm;
} Gibis;

struct Gibis Gibi[MAXGIBI];
void menu();
void imprimir();
void cadastrar();

int main()

{
    menu();
    return 0;
}

void menu()
{
    int op;
    do
    {
        printf(" \n MENU: ");
        printf(" \n 1 - CADASTRAR \n 2 - LISTAR REGISTROS \n 3 - BUSCAR GIBIS \n 0 - SAIR");
        printf(" \n Informe o número da operação desejada: ");
        scanf("%d", &op);
        switch(op)
        {
            case 1:
                cadastrar();
            break;
            case 2:
                listar();
            break;
            case 3:
                buscar();
            case 0:
                printf("\n Programa encerrado.\n");
                return 0;
            default:
                 printf(" \n Opção não existente. Tente novamente.\n");
            break;
        }
    } while(op!=0);
}

void cadastrar()
{
     system("clear");
     // system("cls"); comando de limpeza para windows
     int opc;
     printf("\n Cadastro de Gibis\n");

     for (int i = 0; i < MAXGIBI; i++){
          printf("\n Informe o Código %d: ", i+1);
          scanf("%d", &Gibi.codrev);
          getchar();
          printf(" Informe a Descrição %d: ", i+1);
          gets(Gibi.descri);
          printf(" Informe o Valor %d: ", i+1);
          scanf("%f", &Gibi.valorestm);
     }
          printf("\n Cadastros concluídos. \n");

}

void listar()
{
     system("clear");
     // system("cls");

     printf("\n Lista de Gibis cadastrados\n");

     for (int i = 0; i < MAXGIBI; i++){
          printf(" \n Gibi %d \n", i+1);
          printf(" \n Código: %d ", Gibi.codrev);
          printf(" \n Descrição: %s ", Gibi.descri);
          printf(" \n Valor: %.2f ", Gibi.valorestm);
          printf(" \n \n");
     }
}

void buscar()
{
     system("clear");
     // system("cls");

     printf("\n Buscar Gibis\n");
     int cod;
     printf("\n Informe o código do Gibi: ");
     scanf("%d", cod);
     for(int i = 0; i < MAXGIBI; i++)
     {
          if(cod == Gibi.codrev)
          {
               printf(" \n Gibi %d \n", i+1);
               printf(" \n Código: %d ", Gibi.codrev);
               printf(" \n Descrição: %s ", Gibi.descri);
               printf(" \n Valor: %.2f ", Gibi.valorestm);
          } else {
               printf("\n Registro não encontrado.");
          }
     }
} 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
#include <stdio.h>
#include <ctype.h>
#include <locale.h>
#include <cstdlib>

#define MAXGIBI 4

typedef struct Gibis
{
    int codrev;
    char descri[30];
    float valorestm;
} Gibis;

struct Gibis Gibi[MAXGIBI];
void menu();
void imprimir();
void cadastrar();
void listar();
void buscar();


int main()

{
    setlocale(0, "portuguese");
    menu();
    return 0;
}

void menu()
{
    int op;
    do
    {
        printf(" \n MENU: ");
        printf(" \n 1 - CADASTRAR \n 2 - LISTAR REGISTROS \n 3 - BUSCAR GIBIS \n 0 - SAIR");
        printf(" \n Informe o número da operação desejada: ");
        scanf("%d", &op);
        switch(op)
        {
            case 1:
                cadastrar();
            break;
            case 2:
                listar();
            break;
            case 3:
                buscar();
            break;
            case 0:
                printf("\n Programa encerrado.\n");
                return;
            default:
                 printf(" \n Opção não existente. Tente novamente.\n");
            break;
        }
    } while(op!=0);
}

void cadastrar()
{
     //system("clear");
      system("cls");
     //int opc;
     printf("\n Cadastro de Gibis\n");

     for (int i = 0; i < MAXGIBI; i++){
          printf("\n Informe o Codigo %d: ", i+1);
          scanf("%d", &Gibi[i].codrev);
          getchar();
          printf(" Informe a Descricao %d: ", i+1);
          gets(Gibi[i].descri);
          printf(" Informe o Valor %d: ", i+1);
          scanf("%f", &Gibi[i].valorestm);
     }
          printf("\n Cadastros concluidos. \n");

}

void listar()
{
     system("clear");
     // system("cls");

     printf("\n Lista de Gibis cadastrados\n");

     for (int i = 0; i < MAXGIBI; i++){
          printf(" \n Gibi %d \n", i+1);
          printf(" \n Codigo: %d ", Gibi[i].codrev);
          printf(" \n Descricao: %s ", Gibi[i].descri);
          printf(" \n Valor: %.2f ", Gibi[i].valorestm);
          printf(" \n \n");
     }
}

void buscar()
{
     //system("clear");
     system("cls");

     printf("\n Buscar Gibis\n");
     int cod;
     printf("\n Informe o código do Gibi: ");
     scanf("%d", &cod);
     for(int i = 0; i < MAXGIBI; i++)
     {
          if(cod == Gibi[i].codrev)
          {
               printf(" \n Gibi %d \n", i+1);
               printf(" \n Código: %d ", Gibi[i].codrev);
               printf(" \n Descrição: %s ", Gibi[i].descri);
               printf(" \n Valor: %.2f ", Gibi[i].valorestm);
          } else {
               printf("\n Registro nao encontrado.");
          }
     }
}

Vê se funciona. Quanto ao gets acho que é só um aviso do compilador.

 

Qualquer coisa só retornar aqui.

  • Curtir 1
  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Deu erros nas bibliotecas que você adicionou. Sabe o que pode ser? Aqui diz "arquivo ou diretório inexistente".

Mas de qualquer forma se funcionou aí já tô satisfeito.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Só trocar o cstdlib por stdlib.h.

 

Espero que veja onde eu mudei, senão não vai aprender.

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro 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 publicações 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

×