Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Jonatas Caram

Imprimindo na Tela campo Struct

Recommended Posts

Boa tarde Amigos.

 

Estou com um problema que não consigo resolver.

 

Meu codigo e um trabalho da faculdade, no qual eu tenho que fazer o um programa para cadastro de veículos para um concessionaria.

Enfim..

 

Ele está rodando da forma que eu quero, ainda vou fazer usando array, pra ficar melhor representado para o professor.

Porem parei nessa parte, no programa ele tem menu inicial no qual pergunta ao usuario qual opção ele deseja,:

- Cadastrar - Veiculo (chama a função de cadastro)

- Visualizar - Veiculo Cadastrado (chama a função de visualizar)

 

Caso ele escolha Visualizar ele ira verificar se existe algum veiculo cadastrado (em primeiro momento não haverá, pois não uso nenhum banco de dados ou arquivo pra armazenar, pois não é esse o foco (meu foco e apenas demonstrar um prototipo do programa feito em C) então ira dizer que não existe nenhum veiculo cadastrado, e ira voltar ao menu.

 

Voltando ao menu, podemos cadastrar o veiculo, ira perguntar a categoria de veiculo que deseja cadastrar, feito isso dependendo da escolha, ele ira armazenar essa string no campo dentro da struct.

E ira pedir pra informar o nome da pessoa e data a atual.

Apos feito o cadastro ira perguntar se deseja voltar ao menu, para que visualize veiculo

 

Quando seleciono visualizar (ele ira chamar a função que imprimi na tela os veiculo cadastrado)

 

E ai que está o problema que não acho nem que a vaca tussa :

 

Ele informa toda as informações menos.:

Nome_do_usuario, Data e Categoria

As demais mostra normalmente

 

Imagem abaixo onde grifado era pra exibir as informações, quando chamado a função mostrarv():

x5yv.png

 

 

 

Segue o código abaixo:

 

 

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

//Criada uma estrutura, definida como veiculos, com as descrições dos veiculos
struct veiculos{
	int id; // Criada um identificador 
	char marca[20];
	char modelo[20];
	int potenciaMotor;
	int anoFab;
	char cor[20];
	float valorVista;
	char Catego[20];
}veicu; //Variaveis do tipo Estrutura

//Criada uma estrutura chama Data, onde definimos dia,mes e ano.
struct data{
	int dia;
	int mes;
	int ano;

}date;//Variavel tipo da estrutura data

//Criada a estrutura chama usuario, onde definimos nome e dataCadastro do tipo data
struct usuario{
	char nome[20];
	struct data dataCadastro; // aninhamento de struct - datacadastro é do tipo data
	struct veiculos categoria;
	int cat;
}user;


//Função Que faz Cadastro.
//Como parametro passamos a variavel struct global
void Cadastro(struct usuario user){
 
	//Verifica a categoria digitado
if(user.cat == 1 || user.cat == 2) {
	//Verifica e atribui a nosso campo da struct aninhado o valor
	if (user.cat == 1){
		strcpy(user.categoria.Catego,"Moto");	//função strcpy copia uma string a pra uma variavel	
	}else if (user.cat == 2){
		strcpy(user.categoria.Catego,"Triciclo");	//função strcpy copia uma string a pra uma variavel	
	}
	
	
	//Informa o usuario do sistema
	printf("\nUsuario: ");
	scanf(" %s",&user.nome);	
		system("CLS");
	printf("\nOla.. \n%s Informe a Data atual\n",user.nome); //printa o usuario
	printf("Digite o Dia: ");
	scanf("%d",&user.dataCadastro.dia); //Dia atrelado a struct de usuario
	printf("Digite o Mes: ");
	scanf("%d",&user.dataCadastro.mes); //mes atrelado a struct de usuario
	printf("Digite o Ano: ");
	scanf("%d",&user.dataCadastro.ano);//ano atrelado a struct de usuario
	
	printf("\n[CADASTRO]");
	printf("\n\nMARCA: ");
	scanf(" %s",&veicu.marca);
	printf("MODELO: ");
	scanf(" %s",&veicu.modelo);
	printf("POTENCIA: ");
	scanf(" %d",&veicu.potenciaMotor);
	printf("ANO FABRICACAO: ");
	scanf(" %d",&veicu.anoFab);
	printf("COR: ");
	scanf(" %s",&veicu.cor);
	printf("VALOR: ");
	scanf(" %f",&veicu.valorVista);
	printf("\n--------------------\n");
	
	printf("\n\nVeiculo Cadastrado com Sucesso.\n");
	printf("Feito Por: %s - %d/%d/%d\n\n",user.nome,user.dataCadastro.dia,user.dataCadastro.mes,user.dataCadastro.ano);
	getch();//Aguardo usuario apertar alguma tecla.
	system("CLS");	

}else {
		system("CLS");
		printf("Categoria não encontrada, verifique se digitou corretamento ( 1 ou 2 )");

		}
}


char mostrarV(){
	
	system("CLS");
	printf("\n[SAIDA]");


//	
//Mostra na tela que cadastro foi feito com sucesso e qual usuario fez e a data que fez.

//Erro:
//Não aparece categoria e quem fez o cadastro
		printf("\n\n - Veiculo cadastrado - por %s - %d/%d/%d\n\n",user.nome,user.dataCadastro.dia,user.dataCadastro.mes,user.dataCadastro.ano);
		printf("\n\nVeiculo - %s\n",user.categoria.Catego); //Mostra qual categoria foi escolhida, atraves da verificação
		printf("Marca: %s\n",veicu.marca);
		printf("Modelo: %s\n",veicu.modelo);
		printf("Potencia: %d cc\n",veicu.potenciaMotor);
		printf("Ano: %d\n",veicu.anoFab);
		printf("Cor: %s\n",veicu.cor);
		printf("Valor a Vista: R$%2.f",veicu.valorVista);
		getch();

}

main(){

	int loop,loop2,menu,x;
	struct usuario user;
	struct veiculos veicu;
	veicu.id = 0; //inicializa veicu.id para que não tenha nenhum veiculo cadastrado
	
		system("color 73");
	

while(1){
	
	printf("Deseja Cadastrar ou Visualizar um veiculo: \n");
	printf("Digite 1 : para Cadastro \nDigite 2 : Para Visualizar os Cadastrados \n");
	printf("\nQual Opcao?: ");
	scanf(" %d",&menu);
	
	switch(menu){
		case 1:
			//Informa a categoria de veiculos
			printf(" \n\n\n- Escolha a categoria de Veiculo a Cadastrar - \n\n");
			printf("Ex: Motos - Digite : 1\n");
			printf("Triciclos - Digite : 2\n");
			printf("Qual categoria?: ");
			scanf(" %d",&user.cat); //armazenando categoria
			
			Cadastro(user);// chama cadastro
			
				while(1){
					//Opção que verifica se usuario Voltar ao Menu
					printf("\n--------------------\n");
					printf("\nDeseja visualizar veiculo cadastrado?");
					printf("\nDigite 1 para SIM\n");
					printf("Digite 2 para NAO\n");
					printf("\nQual Opcao?: ");
					scanf(" %d",&loop2);
					system("CLS");
						//Condição para o while
					if(loop2 == 1){
							mostrarV();
							return 0;
					}else{
									return 0;
  						}
					}	
			
			
			
			veicu.id = veicu.id + 1; // incrementa 
			break;
		case 2:
			if(veicu.id < 1) {
				system("CLS");
				printf("Nao existe nenhum veiculo cadastrado no banco de dados:");
			}else{
				 mostrarV();
			}
			break;
		default:
				system("CLS");
				printf("\n\n\nOpcao não encontrada, verifique se digitou corretamento ( 1 ou 2 )\n\n");
			break;
		
	}
	

//Opção que verifica se usuario Voltar ao Menu
	printf("\n--------------------\n");
	printf("\nDeseja voltar ao MENU?");
	printf("\nDigite 1 para SIM\n");
	printf("Digite 2 para NAO\n");
	printf("\nQual Opcao?: ");
	scanf(" %d",&loop);
system("CLS");
//Condição para o while
	if(loop == 1){
		
	}else{
		
		printf("\nAplicacao Finalizada. ");
		return 0;
  		}
	}
//fim da condição
	
return 0;	
}





 

 

 

Codigo.c

 

https://docs.google.com/file/d/0B-T5qjMye2siTThubXNUVWx2cHM

Compartilhar este post


Link para o post
Compartilhar em outros sites

Jonatas Caram,

 

Você está confundindo as estruturas.

 

Perceba que na função de cadastro você passa o usuário como parâmetro. E na função de exibir, utiliza uma variável global para mostrar na tela.

No cadastro do veiculo, o inverso. Armazena na variável global e exibe uma variável local.

 

Encontrei alguns warnings ao compilar o código, como:

- scanf(" %s",&veicu.marca);

Não é necessário o '&', o scanf reconhece que é uma string graças ao %s. Com o '&' você está passando um ponteiro para char(char*).

 

- getch();

Referência indefinida, substitui por getchar().

 

Obs.: Compilei com o gcc.

Dica: Fique sempre atento a warnings no código. Resolvê-los evita bugs futuros.

 

Espero ter ajudado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Agora arrumei, muito obrigado, não estava atento a variáveis locais, coloquei para verificar qual categoria foi digitada antes da chamada da função, e e declarei as variáveis todas como global logo apos a definição das struct, não passei nenhum parâmetro para cadastro() apenas chamei ele apos a verificação.

 

Agora funciona normalmente devido estar me referindo a variável global

 

 

O warning que deu pra voce, pra mim ao apareceu nada, estou fazendo em DevC++, acho que em linux gcc ele mostra erro correto?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Jonatas, DevC++ é uma IDE. O GCC é um compilador para C existente no Linux que faz parte do conjunto de ferramentas GNU. O equivalente dele no Windows seria o MingW...

 

A exibição dos erros e warnings em tempo de compilação é ativada por algumas opções que se passa ao compilador. No caso do GCC, normalmente se utiliza -Wall -Wextra. Dentro de uma IDE é necessário configurar isso em alguma tela.

 

A referência inválida à função getch() acontece porque ela existe somente no cabeçalho conio.h, próprio do DOS, que não faz parte do padrão da linguagem C e não existe no Linux. Por isso sempre dizemos p/ não utilizarem essa biblioteca.

 

http://www.cplusplus.com/forum/beginner/123147/

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.