Ir ao conteúdo
  • Cadastre-se

C Erro no typedef struct no meu código em C


Declinedshark
Ir à solução Resolvido por arfneto,

Posts recomendados

Está dando erro no meu typedef struct e não sei como resolver, alguém pode me ajudar a resolver ou resolver pra mim?

<CODE>

 

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

struct locadora
{
    int codigo, validade;
    char filme[15], dia[11], genero[15], nome[45], validades[50], numero[50];
    struct filmes *ant;
    struct filmes *prox;
}; 
typedef struct locadora filmes;

int escolha;

main()
{
    
    filmes*inicio = (filmes*)malloc(sizeof(filmes));
    if(!inicio)
    {
        printf("Erro ao dar início a fila");
        exit(1);
    }
    
    inicio->codigo = NULL;
    inicio->filme[0] = NULL;
    inicio->genero[0]= NULL;
    inicio->numero[0] = NULL;
    inicio->validades[0] = NULL;
    inicio->dia[0] = NULL;
    inicio->ant = NULL;
    inicio->prox = NULL;
        
    do
    {
        printf("1 - central de ajuda");
        printf("\n");
        printf("2 - Inserir locação");
        printf("\n");
        printf("3 - Imprimir todas as locações a partir do inicio");
        printf("\n");
        printf("4 - Buscar locação");
        printf("\n");
        printf("5 - Remover locação");
        printf("\n");
        printf("6 - Sair");
        printf("\nFunção: ");
        scanf("%i", &escolha);
        printf("\n");
        
        switch(escolha)
        {
            case 1:
                {
                    printf("Tutorial");
                    printf("\nPressione o numero da função que deseja realizar e tecle enter para começar");
                    printf("\n2 - CADASTRO DO CLIENTE");
                    printf("\n3 - MOSTRA OS CLIENTES CADASTRADOS");
                    printf("\n4 - BUSCA UM CLIENTE ESPECIFICO");
                    printf("\n5 - REMOVE UM CLIENTE ESPECIFICO");
                    printf("\n6 - PARA SAIR DO PROGRAMA");
                    scanf("\n");
                }
            case 2:{
                int validade;
                
                printf("Qual a validade da locacao: ");
                scanf("%i", &validade);
                
                if(validade=1)
                    {
                        
                        filmes*novo = (filmes*)malloc(sizeof(filmes));
                        if (!novo)
                        {
                            printf("Erro");
                            exit(1);
                        }
                        
                        
                        novo->nome[0] = NULL;
                        novo->codigo = NULL;
                        novo->filme[0] = NULL;
                        novo->genero[0] = NULL;
                        novo->numero[0] = NULL;
                        novo->validades[0] = NULL;
                        novo->dia[0] = NULL;
                        novo->ant = NULL;
                        novo->prox = NULL;
                        
                        printf("Nome do cliente: ");
                        fflush(stdin);
                        gets(novo->nome);
                         
                        printf("Codigo do filme: ");
                        scanf("%i", &novo->codigo);
                        
                        printf("Nome do filme: ");
                        fflush(stdin);
                        gets(novo->filme);
                        
                        printf("Genero do filme: ");
                        fflush(stdin);
                        gets(novo->genero);
                        
                        printf("Numero do cliente: ");
                        fflush(stdin);
                        gets(novo->numero);
                        
                        printf("Validade da locacao: ");
                        fflush(stdin);
                        gets(novo->validades);
                        
                        printf("Dia de entrega: ");
                        fflush(stdin);
                        gets(novo->dia);
                        
                        
                    
                        
                        
                        if (inicio->prox == NULL)
                           {
                               inicio->prox = novo;
                               novo->ant = inicio;
                           }
                           else
                           {
                               filmes *temp;
                               temp = inicio;
                    
                               while (temp->prox != NULL)
                               {
                                temp = temp->prox;
                               }
                    
                               temp->prox = novo;
                               novo->ant = temp;
                        }
                    }
                    
                    else if(validade = 2)
                    {
                        
                        filmes *novo = (filmes *) malloc (sizeof(filmes));
                        if (!novo)
                        {
                            printf("Erro ");
                            exit(1);
                        }
                        
                        novo->codigo = NULL;
                        novo->filme[0] = NULL;
                        novo->genero[0] = NULL;
                        novo->dia[0] = NULL;
                        novo->ant = NULL;
                        novo->prox = NULL;
                        
                         printf("Nome do cliente: ");
                        scanf("%i", &novo->nome);
                         
                        printf("Codigo do filme: ");
                        scanf("%i", &novo->codigo);
                                    
                        printf("Nome do filme: ");
                        scanf("%i", &novo->filme);
                        
                        printf("Genero do filme: ");
                        scanf("%i", &novo->tipo);
                        
                        printf("Numero do cliente: ");
                        scanf("%i", &novo->numero);
                        
                        printf("Validade da locacao: ");
                        scanf("%i", &novo->validades);
                    
                        printf("Dia de retirada: ");
                        fflush(stdin);
                        gets(novo->dia);
                    
                        
                        filmes *temp;
                        temp = inicio->prox;
                        novo->prox = inicio->prox;
                        inicio->prox = novo;
                        novo->ant = inicio;
                        temp->ant = novo;
                    }
                break;
            }
        
            case 3: 
                {
                    
                    filmes *temp;
                    temp = inicio;
                    
                    if(inicio->prox == NULL)
                    {
                        printf("Nenhuma locacao encontrada\n\n");
                        system("pause");
                        break;
                    }
                    else
                    {
                        
                        do 
                        {
                            temp = temp->prox;
                            printf("Nome: %s\n", temp->nome);
                            printf("Codigo: %i\n", temp->codigo);
                            printf("Filme: %s\n", temp->filme);
                            printf("Genero: %s\n", temp->genero);
                            printf("Numero: %s\n", temp->numero);
                            printf("Validade: %s\n", temp->validades);
                            printf("Dia: %s\n", temp->data);
                            printf("\n");
                        }while (temp->prox != NULL);
                    }
                }
                printf("\n");
                system("pause");
                break;
            
            case 4:
                {
                     
                    if(inicio->prox == NULL)
                    {
                        printf("Nenhum filme encontrado\n\n");
                        system("pause");
                        break;
                    }
                    
                    char filme_pesquisado[30];
                    
                    printf("Informe o nome do filme: ");
                    fflush(stdin);
                    gets(filme_pesquisado);
                    printf("\n");
                    
                     
                    filmes *temp;
                    int aux = 0;
                    temp = inicio;
                    
                     
                    do
                    {
                        temp = temp->prox;
                        if(strcmp(temp->filme, filme_pesquisado) == 0)
                        {
                            printf("Codigo: %i\n", temp->codigo);
                            printf("Filme: %s\n", temp->filme);
                            printf("Genero: %s\n", temp->genero);
                            printf("Dia: %s\n", temp->dia);
                            printf("\n");
                            aux++;
                        }
                    }while (temp->prox != NULL);
                    if(aux == 0)
                    {
                        printf("O filme informado nao foi encontrado na base de dados\n\n");
                        system("pause");
                        break;
                    }
                }
                printf("\n");
                system("pause");
                break;
            case 5:
                {
                    
                    if(inicio->prox == NULL)
                    {
                        printf("Nenhuma locacao encontrada\n\n");
                        system("pause");
                        break;
                    }
                    
                    int codigo_remover;
                    char resp;
                    
                    printf("Informe o codigo da locacao a ser removida: ");
                    scanf("%i", &codigo_remover);
                    
                    filme *temp;
                    filme *aux;
                    temp = inicio->prox;
                    aux = inicio;
                    
                    do
                    {
                        if(temp->codigo == codigo_remover)
                        {
                            temp->prox->ant = aux;
                            aux->prox = temp->prox;
                            free(temp);
                            
                            printf("Informacao removida!\n");
                            printf("Retornar ao menu inicial?<S/N>");
                            resp = getche();
                            if(toupper(resp) == 'S')
                                break;
                            else
                                exit(0);  
                        }
                        else
                        {
                            temp = temp->prox;
                            aux = aux->prox;
                        }
                    }while (temp->prox != NULL);    
                }
                break;
            case 6:{
                
                {
                    printf("Fim do programa\n\n");
                }
                system("pause");
                break;
            }
        }    
        system("cls");

    }while(escolha != 6);

}

Link para o comentário
Compartilhar em outros sites

  • Solução
struct locadora
{
    int codigo, validade;
    char filme[15], dia[11], genero[15], nome[45], validades[50], numero[50];
    struct filmes *ant;
    struct filmes *prox;
}; 
typedef struct locadora filmes;

 

Quando você declara ant e prox precisa identificar como struct filmes porque é isso  que eles são.


Use alguma convenção para identificar todos os tipos que declara via typedef para o resto de seu programa. 

  • Escreva seu programa em torno dos dados
  • Não declare os dados junto com o nó em uma lista ligada. Só vai complicar (muito) sua vida
  • Nunca declare uma lista ligada como se fosse um nó: não é. Só vai complicar (muito mais) sua vida.

Veja esse exemplo:
 

#include <stdio.h>

typedef struct
{
    int  codigo;
    char dia[11];
    char filme[15];
    char genero[15];
    char nome[45];
    char numero[50];
    int  validade;
    char validades[50];

}   Dado;


typedef struct st_node
{
    struct st_node* ant;
    struct st_node* prox;

    Dado* dado;

}   Node;


typedef struct
{
    Node* inicio;
    Node* fim;
    int   limite;
    int   size;

}   Lista;

int main(void)
{
    Lista* locadora;
    return 0;
};

 

E entenda como você pode levar grande vantagem se escrever ANTES de tudo em torno dos dados:

  • locadora é uma Lista, e não o contrário. Sua estrutura Lista e as funções da lista só operam com nós e cada nó tem um dado associado. Se você fizer isso direito pode usar o resto da vida sem sequer recompilar a parte de Lista.
  • Lista tem ao menos um nó, a menos que esteja vazia. Mas para o programa tanto faz
  • Cada nó tem um dado, que pode ser qualquer coisa. No próximo exercício não vai ser um filme ;) 
  • O início, o fim e o tamanho da Lista estão sempre disponíveis e vão junto com a Lista. Compare com todo o código que escreveu para uma Lista só e imagine se tivesse 3 delas...

 

 

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