aula 173

Como criar uma função que retorna uma struct?

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;
}

Deixe um comentário

cinco × dois =

Wagner Gaspar

Capixaba de São Gabriel da Palha, Espírito Santo. Bacharel em Ciência da Computação pela Universidade Federal do Amazonas e mestre em informática pela Universidade Federal do Espírito Santo.