Jump to content
Fórum Script Brasil
  • 0

(Resolvido) Ponteiro para Struct em C


finalbreak
 Share

Question

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 to comment
Share on other sites

2 answers to this question

Recommended Posts

  • 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 to comment
Share on other 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 to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

  • Forum Statistics

    • Total Topics
      149.8k
    • Total Posts
      646.6k
×
×
  • Create New...