Ir ao conteúdo

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


Ir à solução Resolvido por arfneto,

Posts recomendados

Postado

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

}

  • Solução
Postado
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

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

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!