Ir ao conteúdo
  • Cadastre-se

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


Luan BN

Posts recomendados

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

 

Link para o comentário
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
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...