Ir ao conteúdo

Posts recomendados

Postado

Olá. Estou com o seguinte erro. Na hora de consultar a placa de carro ele mostra que não existe. Na hora de mostrar o Relatório também não esta mostrando. Ao meu ver o código esta certo mas não estou achando o erro.

 

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


struct FastCar{
	
	char placa[10],descricao[20],fabricante[50],cor[20];
	int ano;
	float preco;
	
};

int i=0;

void Cadastro(struct FastCar fastCar){
	struct FastCar *c;
	c = (struct FastCar*)malloc(sizeof(struct FastCar));
	c = &fastCar;
	int x;
	printf("voce Selecionou Cadastrar Automovel!!\n\n");
	printf("Digite a Placa do Carro:");
	fflush(stdin);
	gets((c + i)->placa);
	
	printf("Digite a Descricao do Carro:");
	gets((c + i)->descricao);
	
	printf("Digite a fabricação do Carro:");
	fflush(stdin);
	gets((c + i)->fabricante);
	
	printf("Digite a Cor do Carro:");
	gets((c + i)->cor);
	
	printf("Digite o Ano de fabricação do Carro:");
	fflush(stdin);
	scanf("%d",&(c + i)->ano);
	
	printf("Digite o Preco do Carro:");
	scanf("%f",&(c + i)->preco);
	
	i++;
	
	
}

void Consulta(struct FastCar fastCar){
		struct FastCar *c;
		c = &fastCar;
		char carro[10];

		printf("voce Selecionou Consultar Automovel!!\n\n");
		printf("Digite A Placa do Carro:");
		fflush(stdin);
		gets(carro);
		int x;
		for(x = 0; x<i; x++){
			if(strcmp(carro,(c + x)->placa)==0){
				printf("Descricao: %s \n",(c + x)->descricao);
				printf("Fabricante: %s \n",(c + x)->fabricante);
				printf("Cor: %s \n",(c + x)->cor);
				printf("Ano de fabricação: %d \n",(c + x)->ano);
				printf("Preco: %.2f \n",(c + x)->preco);
			}else{
				printf("Veiculo nao encontrado!");
				break;
			}	
		}	
}

void Relatorio(struct FastCar fastCar){
		struct FastCar *c;
		c = &fastCar;
		int x;
		printf("voce Selecionou Relatorio Automovel!!\n\n");
		for(x=0; x<i; x++){
				printf("Placa: %s \n",(c + x)->placa);
				printf("Descricao: %s \n",(c + x)->descricao);
				printf("Fabricante: %s \n",(c + x)->fabricante);
				printf("Cor: %s \n",(c + x)->cor);
				printf("Ano de fabricação: %d \n",(c + x)->ano);
				printf("Preco: %.2f \n",(c + x)->preco);
			
		}
}


main(){
	
	struct FastCar fastCar;
	int x;
	printf("Bem vindo a FastCars!!\n\n");
	do{
	printf("O que voce Deseja Fazer?\n");
	printf("1- Cadastrar Automovel\n");
	printf("2- Consultar Automovel\n");
	printf("3- Gerar Relatorio\n");
	printf("4- Sair do Programa\n");
	scanf("%d",&x);
	
	if(x == 1){
		Cadastro(fastCar);
	}else if( x==2){
		Consulta(fastCar);
	}else if( x == 3){
		Relatorio(fastCar);		
	}
		
	}while(x!=4);
}

 

Postado

Eu dei uma breve olhada no seu código e vi que tem erros básico de operação com ponteiros e alocação de memória. Na função de cadastrar você aloca uma memória e endereça para o ponteiro c e na próxima linha você endereça a struct parametro para c (ou seja você perde a alocação que você fez), além de endereçar uma varável que nem foi iniciada em main. Eu sugiro estudar novamente sobre operações de ponteiros e struct. 

  • Curtir 1
Postado

@daniel.oliveira Não entendi o que você quis dizer com perder alocação. eu aloco c e depois recebo o endereço que esta no parâmetro. Consegui arrumar, código ficou assim.

 

 

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


struct FastCar{
	
	char placa[10],descricao[20],fabricante[50],cor[20];
	int ano;
	float preco;
	
};

int i=0;

void Cadastro(struct FastCar **fastCar){
	struct FastCar *c;
	c = (struct FastCar*)malloc(sizeof(struct FastCar));
	c = &fastCar[0];
	int x;
	printf("voce Selecionou Cadastrar Automovel!!\n\n");
	printf("Digite a Placa do Carro:");
	fflush(stdin);
	gets((c+i)->placa);
	
	printf("Digite a Descricao do Carro:");
	gets((c+i)->descricao);
	
	printf("Digite a fabricação do Carro:");
	fflush(stdin);
	gets((c+i)->fabricante);
	
	printf("Digite a Cor do Carro:");
	gets((c+i)->cor);
	
	printf("Digite o Ano de fabricação do Carro:");
	fflush(stdin);
	scanf("%d",&(c+i)->ano);
	
	printf("Digite o Preco do Carro:");
	scanf("%f",&(c+i)->preco);
	
	i++;
	
	
}

void Consulta(struct FastCar **fastCar){
		struct FastCar *c;
		c = &fastCar[0];
		char carro[10];
		if(c == NULL){
			printf("Algo deu errado!");
		}else{
		printf("voce Selecionou Consultar Automovel!!\n\n");
		printf("Digite A Placa do Carro:");
		fflush(stdin);
		gets(carro);
		int x;
		for(x = 0; x<i; x++){
			if(strcmp(carro,(c+x)->placa)==0){
				printf("Descricao: %s \n",(c+x)->descricao);
				printf("Fabricante: %s \n",(c+x)->fabricante);
				printf("Cor: %s \n",(c+x)->cor);
				printf("Ano de fabricação: %d \n",(c+x)->ano);
				printf("Preco: %.2f \n",(c+x)->preco);
			}else{
				printf("Veiculo nao encontrado!");
				break;
			}	
		}	
		}
		
}

void Relatorio(struct FastCar **fastCar){
		struct FastCar *c;
		c = &fastCar[0];
		int x;
		if(c == NULL){
		 printf("Algo deu errado!");	
		}else{
		printf("voce Selecionou Relatorio Automovel!!\n\n");
		for(x=0; x<i; x++){
				printf("Placa: %s \n",(c+x)->placa);
				printf("Descricao: %s \n",(c+x)->descricao);
				printf("Fabricante: %s \n",(c+x)->fabricante);
				printf("Cor: %s \n",(c+x)->cor);
				printf("Ano de fabricação: %d \n",(c+x)->ano);
				printf("Preco: %.2f \n",(c+x)->preco);
			
		}	
		}
		
}

main(){
	
	struct FastCar *fastCar;
	int x;
	printf("Bem vindo a FastCars!!\n\n");
	do{
	printf("O que voce Deseja Fazer?\n");
	printf("1- Cadastrar Automovel\n");
	printf("2- Consultar Automovel\n");
	printf("3- Gerar Relatorio\n");
	printf("4- Sair do Programa\n");
	scanf("%d",&x);
	
	if(x == 1){
		Cadastro(&fastCar);
	}else if( x==2){
		Consulta(&fastCar);
	}else if( x == 3){
		Relatorio(&fastCar);		
	}
		
	}while(x!=4);
}

 

Postado
main(){
	
	struct FastCar *fastCar; //inicia fastCar que aponta aleatoriamente
  
	...
	
	if(x == 1){
		Cadastro(&fastCar); //chama função Cadastro
      
     ...

void Cadastro(struct FastCar **fastCar){ // ponteiro pra ponteiro?
	struct FastCar *c; //inicia c que aponta aleatoriamente
	c = (struct FastCar*)malloc(sizeof(struct FastCar)); //c aponta para memória inicializada
	c = &fastCar[0]; // c aponta para o que fastCar está apontando - aleatoriamente por que você declarou em main

 

 

 

Postado
7 minutos atrás, daniel.oliveira disse:

main(){
	
	struct FastCar fastCar;
  
	...
	
	if(x == 1){
		Cadastro(&fastCar); 
      
     ...

void Cadastro(struct FastCar *fastCar){ 
	struct FastCar *c; 
	c = (struct FastCar*)malloc(sizeof(struct FastCar)); 
	c = &fastCar[0]; 

 

O certo seria isso então?

 

 

adicionado 2 minutos depois

@daniel.oliveira O que foi me ensinado é que quando tu aloca a memória ele retorna um ponteiro vazio ou seja tu precisa passar o endereço.

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

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!