Ir ao conteúdo

Posts recomendados

Postado

Olá estou com uma duvida. A minha lista fica dando o seguinte erro " [Error] request for member 'tipo' in something not a structure or union". Mas n entendo o motivo.

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




struct Lista{
	
	char placa[9],tipo[50],cor[50];
	int anoF;
	float preco;
	struct Lista *prox;
	
};

typedef struct Lista *lista;
typedef struct Lista dados;

lista* criaLista(){
	lista *li = (lista*)malloc(sizeof(lista));
	if(li != NULL){
		li = NULL;
	}
	return li;	
}

lista* Cadastra(lista *li){
	
	if( li == NULL){
		printf("Algo deu errado");
	return 0;
	}
	lista *l = (lista*)malloc(sizeof(lista));
	
	l->prox=li;
	li = l;
	printf("Cadastrado com sucesso!!");
	return li;
}

void Relatorio(lista *li){
	lista *aux = li;
	while(aux!=NULL){
		
		printf("TIPO:%s",aux->tipo);
		printf("PLACA:%s",aux->placa);
		printf("COR:%s",aux->cor);
		printf("ANO:%d",aux->anoF);
		printf("PRECO:%f",aux->preco);
				
	aux=aux->prox;	
	}
	
}

main(){
	lista *l;
	l = criaLista();
	int x;
	do{
		printf("1-Cadastrar:\n");
		printf("2-Vender:\n");
		printf("3-Procurar:\n");
		printf("4-Relatorio:\n");
		scanf("%d",&x);
		if( x == 1){
			printf("Digite o Tipo de Automovel:");
			gets(l->tipo);
			printf("Digite a Placa do Automovel:");
			gets(l->placa);
			printf("Digite a Cor do Automovel:");
			gets(l->cor);
			printf("Digite o Ano do Automovel:");
			scanf("%d",&l->anoF);
			printf("Digite o Preco do Automovel:");
			scanf("%f",&l->preco);
			Cadastra(l);
			
		}else if( x == 2){
			
		}else if( x == 3){
			
		}else if( x == 4){
			Relatorio(l);
			
		}else{
			break;
		}			
		
	}while(x!=5);	
	
}

 

Postado

você está confundindo quando deve usar Lista, lista e lista*. Outra coisa, use fgets (gets foi depreciado):

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




struct Lista{
	
	char placa[9],tipo[50],cor[50];
	int anoF;
	float preco;
	struct Lista *prox;
	
};

typedef struct Lista *lista;
typedef struct Lista dados;

lista criaLista(){
	lista li = (lista)malloc(sizeof(Lista));
	/*if(li != NULL){
		li = NULL;
	}*/
	return li;	
}

lista* Cadastra(lista *li){
	
	if( li == NULL){
		printf("Algo deu errado");
	return 0;
	}
	lista l = (lista)malloc(sizeof(Lista));
	
	l->prox=*li;
	//li = &l;
	printf("Cadastrado com sucesso!!");
	return li;
}

void Relatorio(lista *li){
	lista aux = *li;
	while(aux!=NULL){
		
		printf("TIPO:%s",aux->tipo);
		printf("PLACA:%s",aux->placa);
		printf("COR:%s",aux->cor);
		printf("ANO:%d\n",aux->anoF);
		printf("PRECO:%f\n",aux->preco);
				
	aux=aux->prox;	
	}
	
}

main(){
	lista l;
	l = criaLista();
	int x;
	do{
		printf("1-Cadastrar:\n");
		printf("2-Vender:\n");
		printf("3-Procurar:\n");
		printf("4-Relatorio:\n");
		scanf("%d",&x);
		getchar();
		if( x == 1){
			printf("Digite o Tipo de Automovel:");
			fgets(l->tipo, 50, stdin);
			printf("Digite a Placa do Automovel:");
			fgets(l->placa, 9, stdin);
			printf("Digite a Cor do Automovel:");
			fgets(l->cor, 50, stdin);
			printf("Digite o Ano do Automovel:");
			scanf("%d",&l->anoF);
			printf("Digite o Preco do Automovel:");
			scanf("%f",&l->preco);
			Cadastra(&l);
			
		}else if( x == 2){
			
		}else if( x == 3){
			
		}else if( x == 4){
			Relatorio(&l);
			
		}else{
			break;
		}			
		
	}while(x!=5);	
	
}

 

  • Curtir 1
Postado

@Flávio Pedroza Olá, obrigado pela ajuda. Mas acabei fazendo de outra forma.

 

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

struct Dados{

	char placa[9],tipo[50],cor[50];
	int anoF;
	float preco;
};

struct Elemento{
    struct Dados dados;
    struct Elemento *prox;
};


typedef struct Elemento *lista;


lista* criaLista(){
   lista *d=(lista*)malloc(sizeof(lista));
       printf("Alocou\n");
    if(d!=NULL){

    *d = NULL;
    }
    return d;

}

int Cadastra(lista *li,struct Dados d){

	if( li == NULL){
		printf("Algo deu errado");
	return 0;
	}
	struct Elemento *l =(struct Elemento*)malloc(sizeof(struct Elemento));
	if( l == NULL){
		printf("Não alocou\n");
	}else{
	l->dados = d;
	l->prox = (*li);
	*li = l;	
	}
	
	

	printf("Cadastrado com sucesso!!\n");
	return 1;
}

Relatorio(lista *li){
	struct Elemento *aux = *li;
	while(aux!=NULL){
		printf("\n");
		printf("TIPO:%s\n",aux->dados.tipo);
		printf("PLACA:%s\n",aux->dados.placa);
		printf("COR:%s\n",aux->dados.cor);
		printf("ANO:%d\n",aux->dados.anoF);
		printf("PRECO:%.2f\n",aux->dados.preco);

	aux=aux->prox;
	}

}



main(){

	struct Dados d;
	lista *li;
	li =criaLista();

	int x;

	do{
		printf("1-Cadastrar:\n");
		printf("2-Vender:\n");
		printf("3-Procurar:\n");
		printf("4-Relatorio:\n");
		scanf("%d",&x);
		getchar();
		if( x == 1){
			printf("Digite o Tipo de Automovel:");
			fgets(d.tipo,50,stdin);
			printf("Digite a Placa do Automovel:");
			fgets(d.placa,9,stdin);
			printf("Digite a Cor do Automovel:");
			fgets(d.cor,50,stdin);
			printf("Digite o Ano do Automovel:");
			fflush(stdin);
			scanf("%d",&d.anoF);
			printf("Digite o Preco do Automovel:");		
			scanf("%f",&d.preco);
			Cadastra(li,d);

		}else if( x == 2){

		}else if( x == 3){

		}else if( x == 4){
			Relatorio(li);

		}else{
			break;
		}

	}while(x!=5);

}

 

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!