Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Ponteiro para Struct em C


finalbreak

Pergunta

Olá pessoal. Estou tendo problemas ao tentar guardar mais de uma informação dentro de uma struct que foi passada como referência. O código:

#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
typedef struct{
char nome[50];
char endereco[50];
int telefone;
int cpf;
int cdc;
int cdd;
} FUNCIONARIO;
void fcadastro(FUNCIONARIO *cf){
printf("INSIRA O NOME DO FUNCIONÁRIO: ");
fflush(stdin);
gets(cf -> nome);
printf("INSIRA O ENDEREÇO DO FUNCIONÁRIO: ");
fflush(stdin);
gets(cf -> endereco);
printf("INSIRA O TELEFONE DO FUNCIONÁRIO: ");
scanf("%i", &cf -> telefone);
printf("INSIRA O CPF DO FUNCIONÁRIO: ");
scanf("%i", &cf -> cpf);
printf("INSIRA O CÓDIGO DO CARGO: ");
scanf("%i", &cf -> cdc);
printf("INSIRA O CÓDIGO DO DEPARTAMENTO: ");
scanf("%i", &cf -> cdd);
}
void exbircf(FUNCIONARIO cf){
printf("NOME DO FUNCIONÁRIO: %s\n", cf.nome);
printf("ENDEREÇO DO FUNCIONÁRIO: %i\n", cf.endereco);
printf("TELEFONE DO FUNCIONÁRIO: %i\n", cf.telefone);
printf("CPF DO FUNCIONÁRIO: %i\n", cf.cpf);
printf("CÓDIGO DO CARGO: %i\n", cf.cdc);
printf("CÓDIGO DO DEPARTAMENTO: %i\n", cf.cdd);
}
int main(){
setlocale(LC_ALL, "portuguese");
FUNCIONARIO cfuncionario;
fcadastro(&cfuncionario);
exbircf(cfuncionario);
system("pause");
return 0;
}
Queria saber como faço para armazenar vários dados dentro dessa estrutura, como num vetor de n elementos.
Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 0

Seu código tem alguns erros voce viu o console apos a compilacão.

Para armazenar vários valores em uma estrutura é necessário usar vetores e matrizes

veja seu código abaixa utilizando matrizes e com erros corrigidos. Esta funcionando mas peço que você leia e entenda como foi feito se não nada vai te acrescentar.

Att barão.

#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
#define SIZE 50 

int controle = 0;//só para controle de cadastros

typedef struct{
char nome[SIZE][SIZE]; /*uma matriz de 50 x 50 */
char endereco[SIZE][SIZE];
int telefone[SIZE]; 
int cpf[SIZE]; 
int cdc[SIZE]; 
int cdd[SIZE];

 
} FUNCIONARIO;
 
void fcadastro(FUNCIONARIO *cf){
	int opcao;
	int i=0;
	
	
	
do{	
	system("cls");
printf("INSIRA O NOME DO FUNCIONÁRIO: ");

//fflush(stdin);use somente para limpar o buffer de saída

scanf("%s", cf -> nome[i]);/*A funcao gets esta absoleta por causar overflow*/
printf("INSIRA O ENDEREÇO DO FUNCIONÁRIO: ");

//fflush(stdin); use somente para limpar o buffer de saída

scanf("%s", cf -> endereco[i]);/*A funcao gets esta absoleta por causar overflow*/
printf("INSIRA O TELEFONE DO FUNCIONÁRIO: ");

scanf("%i", &cf -> telefone[i]);
printf("INSIRA O CPF DO FUNCIONÁRIO: ");
scanf("%i", &cf -> cpf[i]);
printf("INSIRA O CÓDIGO DO CARGO: ");
scanf("%i", &cf -> cdc[i]);
printf("INSIRA O CÓDIGO DO DEPARTAMENTO: ");
scanf("%i", &cf -> cdd[i]);

i++;
controle++;/*A cada cadastro soma +1 a variavel global controle assim vou saber quantos cadastro foram feitos vai facilitar a exibicao no for da funcao exibir*/


printf("Press... (1) para novo cadastro, Outro valor para sair...\n\n");
scanf("%d", &opcao);
}while(opcao == 1);
}
 
void exbircf(FUNCIONARIO *cf){/*Passa como ponteiro tambem*/
int i=0;	
system("cls");	

for(i=0; i <controle; i++){/*Exibi todos os cadastros realizados*/
printf("NOME DO FUNCIONÁRIO: %s\n", cf->nome[i]);
printf("ENDEREÇO DO FUNCIONÁRIO: %s\n", cf->endereco[i]);/*O especificador de formato %i É para inteiros mas a variável endereco é um vetor char[50]*/
printf("TELEFONE DO FUNCIONÁRIO: %i\n", cf->telefone[i]);
printf("CPF DO FUNCIONÁRIO: %i\n", cf->cpf[i]);
printf("CÓDIGO DO CARGO: %i\n", cf->cdc[i]);
printf("CÓDIGO DO DEPARTAMENTO: %i\n", cf->cdd[i]);

printf("\n\n");
}
}
 
int main(){
setlocale(LC_ALL, "portuguese");

FUNCIONARIO cfuncionario;

fcadastro(&cfuncionario);

exbircf(&cfuncionario);

system("pause");
return 0;
} 
Link para o comentário
Compartilhar em outros sites

  • 0

<script type='text/javascript'>window.mod_pagespeed_start = Number(new Date());</script>

Seu código tem alguns erros voce viu o console apos a compilacão.

Para armazenar vários valores em uma estrutura é necessário usar vetores e matrizes

veja seu código abaixa utilizando matrizes e com erros corrigidos. Esta funcionando mas peço que você leia e entenda como foi feito se não nada vai te acrescentar.

Att barão.

#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
#define SIZE 50 

int controle = 0;//só para controle de cadastros

typedef struct{
char nome[SIZE][SIZE]; /*uma matriz de 50 x 50 */
char endereco[SIZE][SIZE];
int telefone[SIZE]; 
int cpf[SIZE]; 
int cdc[SIZE]; 
int cdd[SIZE];

 
} FUNCIONARIO;
 
void fcadastro(FUNCIONARIO *cf){
	int opcao;
	int i=0;
	
	
	
do{	
	system("cls");
printf("INSIRA O NOME DO FUNCIONÁRIO: ");

//fflush(stdin);use somente para limpar o buffer de saída

scanf("%s", cf -> nome[i]);/*A funcao gets esta absoleta por causar overflow*/
printf("INSIRA O ENDEREÇO DO FUNCIONÁRIO: ");

//fflush(stdin); use somente para limpar o buffer de saída

scanf("%s", cf -> endereco[i]);/*A funcao gets esta absoleta por causar overflow*/
printf("INSIRA O TELEFONE DO FUNCIONÁRIO: ");

scanf("%i", &cf -> telefone[i]);
printf("INSIRA O CPF DO FUNCIONÁRIO: ");
scanf("%i", &cf -> cpf[i]);
printf("INSIRA O CÓDIGO DO CARGO: ");
scanf("%i", &cf -> cdc[i]);
printf("INSIRA O CÓDIGO DO DEPARTAMENTO: ");
scanf("%i", &cf -> cdd[i]);

i++;
controle++;/*A cada cadastro soma +1 a variavel global controle assim vou saber quantos cadastro foram feitos vai facilitar a exibicao no for da funcao exibir*/


printf("Press... (1) para novo cadastro, Outro valor para sair...\n\n");
scanf("%d", &opcao);
}while(opcao == 1);
}
 
void exbircf(FUNCIONARIO *cf){/*Passa como ponteiro tambem*/
int i=0;	
system("cls");	

for(i=0; i <controle; i++){/*Exibi todos os cadastros realizados*/
printf("NOME DO FUNCIONÁRIO: %s\n", cf->nome[i]);
printf("ENDEREÇO DO FUNCIONÁRIO: %s\n", cf->endereco[i]);/*O especificador de formato %i É para inteiros mas a variável endereco é um vetor char[50]*/
printf("TELEFONE DO FUNCIONÁRIO: %i\n", cf->telefone[i]);
printf("CPF DO FUNCIONÁRIO: %i\n", cf->cpf[i]);
printf("CÓDIGO DO CARGO: %i\n", cf->cdc[i]);
printf("CÓDIGO DO DEPARTAMENTO: %i\n", cf->cdd[i]);

printf("\n\n");
}
}
 
int main(){
setlocale(LC_ALL, "portuguese");

FUNCIONARIO cfuncionario;

fcadastro(&cfuncionario);

exbircf(&cfuncionario);

system("pause");
return 0;
} 

Opa, deu certo. Me ajudou bastante aqui. Muito obrigado! :D

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...