aula 174

Como criar um vetor (array unidimensional) de struct?

O principal objetivo das estruturas de dados é auxiliar na tarefa de trabalhar com conjuntos de dados. Também podemos ter conjuntos de struct. Nesta aula veremos como criar um vetor de struct.

Criar uma estrutura de dados do tipo vetor (array unidimensional) de estruct é exatamente igual ao processo de criação de um vetor de qualquer tipo primitivo.

Na aula anterior elaboramos uma função que preenche uma variável do tipo Pessoa e retorna essa variável. Agora vamos fazer uma repetição para ler e preencher um vetor de Pessoas de tamanho 3. Para isso, basta atribuir o retorno da função à posição i do vetor, assim:

    for(i = 0; i < 3; i++)
        pessoas[i] = lerPessoa();

Código completo em C para preencher um vetor de Pessoas

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

/*
            Aula 174: Como criar um vetor de 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;

// Procedimento para imprimir os dados de uma Pessoa
void imprimirPessoa(Pessoa p){
    printf("\n\tNome: %s", p.nome);
    printf("\tIdade: %d\n", p.idade);
    printf("\tSexo: %c\n", p.sexo);
    printf("\tData de nas.: %d/%d/%d\n\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("\nDigite 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);
    scanf("%c");
    return p;
}

int main() {
    int i;
    Pessoa pessoas[3];

    for(i = 0; i < 3; i++)
        pessoas[i] = lerPessoa();

    for(i = 0; i < 3; i++)
        imprimirPessoa(pessoas[i]);

    return 0;
}

Deixe um comentário

dois × 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.