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