Dando continuidade ao nosso Curso de Programação C e ao estudo de novos tipos de dados com typedef struct, nesta aula vamos aprender como criar uma função que retorna uma struct.
Este processo é exatamente igual a uma função que retorna um valor primitivo. Neste exemplo, criamos uma variável do tipo Pessoa, lemos os dados do teclado e ao final, retornamos essa variável.
Pessoa lerPessoa(){
Pessoa p;
// preencher a variável p
return p; // retorna a variável p
}
Código completo de exemplo de função que retorna uma variável do tipo Pessoa
#include <stdio.h>
#include <stdlib.h>
/*
Aula 173: Como criar uma função que retorna uma struct?
Código escrito por Wagner Gaspar
Abril de 2021
*/
typedef struct{
int dia, mes, ano;
}DataNas;
typedef struct{
DataNas dataNas;
int idade;
char sexo;
char nome[100];
}Pessoa;
void imprimirPessoa(Pessoa p){
printf("\tNome: %s", p.nome);
printf("\tIdade: %d\n", p.idade);
printf("\tSexo: %c\n", p.sexo);
printf("\tData de nas.: %d/%d/%d\n", p.dataNas.dia, p.dataNas.mes, p.dataNas.ano);
}
// função que lê os dados de uma pessoa e retorna para quem chamou
Pessoa lerPessoa(){
Pessoa p;
printf("Digite seu nome: ");
fgets(p.nome, 100, stdin);
printf("Digite sua idade: ");
scanf("%d", &p.idade);
scanf("%c");
printf("Digite f ou m para o sexo:");
scanf("%c", &p.sexo);
printf("Digite sua data de nascimento no formato dd mm aaaa:");
scanf("%d%d%d", &p.dataNas.dia, &p.dataNas.mes, &p.dataNas.ano);
return p;
}
int main() {
Pessoa pessoa;
pessoa = lerPessoa(); // a variável pessoa recebe uma pessoa da função lerPessoa.
imprimirPessoa(pessoa);
return 0;
}
