Vetor de Struct

Operações relacionais e lógicas Operações Aritméticas variáveis Tipos de dados Estruturas Aninhadas algoritmos

Oi pessoal! Nos últimos artigos que publiquei na Série Estruturas de Dados, falei sobre como o conceito de Registros é implementando em C. Também dei início aos algoritmos de Ordenação com Bubble Sort. Hoje demonstrarei como criar um vetor de Registros em C, da mesma forma que mostrei como isso é feito em Pascal. No próximos artigos será primordial que vocês saibam este conceito para conseguir acompanhar. Tudo bem? Vamos começar.

 

 

Conceito e Representação

 

A Figura 1 ilustra como um vetor de registros pode ser representado.

 

Exemplo de Vetor de struct
Exemplo de Vetor de Estruturas

 

Observe que cada posição do vetor armazena um conjunto de informações diferentes. Neste exemplo, cada posição está armazenando um tipo string (nome da pessoa), um tipo inteiro (idade) e um tipo float (salário). A declaração da estrutura ficará da seguinte forma:

 

 

Observe que a linha 6 é a que cria de fato o vetor. Neste exemplo é criado um vetor de 10 posições para armazenar o nome, idade e o salário de um funcionário. Agora vamos ver como manipular esse vetor de estruturas.

 

 

Inicializando o Vetor de Estrutura

 

Sempre antes de usar uma estrutura, e particularmente um vetor de estruturas, devemos inicializá-la, isto é, atribuir aos seus membros os valores padrão (default) de cada tipo de dado. O código abaixo mostra como isso é feito no exemplo da nossa Figura 1. Note que uma função da biblioteca string foi utilizada aqui, STRCPY. Essa função copia um valor para uma variável de cadeia de caracteres. Aqui, estou copiando o valor NULL para o membro nome da estrutura funcionário. Os outros membros você pode acessar normalmente e diretamente, usando o operador direto "ponto".

 

 

 

Preenchendo o Vetor de Estrutura

 

Depois de inicializado o vetor da estrutura, ai sim podemos inserir informações ali. Para isso precisaremos de um for para armazenar cada estrutura em uma posição. O código abaixo ilustra como armazenar as informações do nosso funcionário. Dentro do for colocamos os comandos de leitura e escrita, necessários para pedir ao usuário o que ele deve digitar e depois armazenar o que foi digitado. Note que para armazenar, precisamos utilizar a sintaxe:

 

&nome_vetor_struct[indice].nome_membro_struct;

 

 

 

Imprimindo o Vetor de Estrutura

 

Para imprimir também precisaremos de um for para percorrer todas as posições desse vetor. Cada passagem no for será impresso o conteúdo de uma posição do vetor na tela. A sintaxe que você deve usar aqui é a seguinte:

 

printf( "\n TEXTO %_" , nome_vetor_struct[indice].nome_membro_struct);

 

Não esqueça de colocar o tipo de dado que deverá ser impresso, isto é, substitua %_ pelo correspondente (exemplo: %d para inteiro), isso é o que chamamos de saída formatada (cabe um artigo só pra falar disso!!). Também não esqueça de por um texto bem claro para o usuário, de forma que ele entenda a informação.

 

 

 

Acessando e Modificando um membro individualmente

 

Se  for necessário acessar um membro de forma individual, você pode fazer isto da seguinte forma:

 

nome_vetor_struct[indice].nome_membro_struct

 

Exemplo:

func[5].nome = "Cecília";

 

Cinco é a posição do vetor que você quer modificar.

 

 

Imprimindo um membro individualmente

 

Se  for necessário acessar um membro de forma individual, você pode fazer isto da seguinte forma:

 

printf(" \n TEXTO ", nome_vetor_struct[indice].nome_membro_struct);

 

Exemplo:

printf(" \n A idade do (a) Funcionário (a) é %d :", func[5].idade);

 

Cinco é a posição do vetor que você quer apresentar na tela.

 

 

Buscando um elemento no Vetor de Estruturas

 

Você também pode procurar por um valor no vetor de estruturas. Por exemplo, você pode fazer uma pesquisa pela idade, pelo salário ou pelo nome, portanto, você pode fazer uma pesquisa por qualquer um dos membros da estrutura. Entretanto, é necessário tomar cuidado quando for buscar por uma string. Primeiro vou mostrar como fica o código no caso de uma busca por uma string, em nosso caso, vamos procurar pelo membro nome.

 

 

Vamos ver o que está acontecendo neste código. Primeiro é solicitado ao usuário que digite um nome para a busca. Este nome será armazenado em uma variável chamada nome, que foi declarada anteriormente no programa.

 

Como o nome terá de ser procurado neste vetor, então um for será usado para percorrer esse vetor e analisar, posição a posição, se o nome digitado pelo usuário está ali ou não. Dessa forma, a string digitada pelo usuário será comparada com a string armazenada na posição i do vetor.

 

Uma função chamada strcmp(string1, string2); da biblioteca de strings é utilizada para fazer a comparação da primeira string com a segunda string. Aqui a variável nome será comparada com o nome que está armazenado em cada uma das posições do vetor (func[i].nome).

 

Quando o resultado dessa comparação for igual a zero, significa que a string foi encontrada em uma determinada posição do vetor. Mas, se o resultado for diferente de zero, então, a string não foi encontrada. Portanto um if é usado dentro do for para fazer essa verificação: if(strcmp(nome, func[i].nome)== 0).

 

Quando a comparação bater, observe que um printf apresenta uma mensagem de alerta para o usuário, avisando que o registro foi encontrado, e uma outra variável chamada posição, é setada com o valor de i. Dessa forma a posição em que a string foi encontrada é guardada, podendo ser usada em outras partes do programa.  Quando a comparação não bater, então a variável posição é setada com o valor -1, que é um valor que não existe no vetor, isto é, o vetor guarda posições de zero a nove (dez posições), não existe posição -1.

 

Lembre-se, um for está sendo percorrido, não é legal ficar mostrando mensagens para o usuário a cada passagem pelo for, então é melhor guardar o que é importante e imprimir o necessário fora dele.

 

É exatamente isso o que acontece em seguida. Um if é adicionado logo depois do for para verificar se posição é -1 ou não. Se for posição for igual a -1, então o registro não foi encontrado, caso contrário, é impresso o valor da posição da estrutura. Para que isso seja possível, a variável i, que seria o índice do vetor, é substituída pela variável posição, que contém o valor exato da posição em que o nome foi encontrado.

 

 

Buscando faixas de valores

 

Agora que vocês já sabem como procurar por um registro especifico usando uma string, vou mostrar pra vocês outras coisas interessantes que vocês podem fazer. Por exemplo, listar todas as pessoas com idade entre 18 e 30 anos.

 

 

 

Exemplo Completo

 

Vou deixar um exemplo completo, mas referente à outra estrutura, assim vocês podem aproveitar para analisar o código e verificar se aprenderam, ok?

 

 

 

Conclusão

 

Bom, acho que deu pra vocês conseguirem uma noção de tudo o que podem fazer com vetores de estruturas, não? Se tiverem dúvidas, por favor, deixem aí nos comentários, que eu responderei com o maior prazer! Nos próximos artigos veremos alguns outros detalhes importantes sobre Estrururas em C. Até!

Outros artigos da série

<< Algoritmos de Ordenação: Bubble SortEstruturas Aninhadas >>

NEWSLETTER

Receba os melhores conteúdos sobre sistemas eletrônicos embarcados, dicas, tutoriais e promoções.

Obrigado! Sua inscrição foi um sucesso.

Ops, algo deu errado. Por favor tente novamente.

Elaine Cecília Gatto
Bacharel em Engenharia de Computação. Mestre em Ciência da Computação. Co-fundarora e Líder das #GarotasCPBr. Pesquisadora Convidada no Grupo de Pesquisa de "Artes em Tecnologias Emergentes" do Programa de Pós Graduação em Design na UNESP Campus Bauru. Cantora, Docente no Magistério Superior, Geek, Nerd, Otaku e Gamer. Apaixonada por Michael Jackson, Macross, Séries e Filmes de Super Heróis, Cervejas e Vinhos. Mais informações sobre mim você encontra em: http://lattes.cnpq.br/8559022477811603.

3
Deixe um comentário

avatar
 
3 Comment threads
0 Thread replies
1 Followers
 
Most reacted comment
Hottest comment thread
3 Comment authors
FelipeNahimHigor Recent comment authors
  Notificações  
recentes antigos mais votados
Notificar
Felipe
Visitante
Felipe

Se eu precisar saber o tamanho do vetor de structs o que eu deveria utilizar strlen ou sizeof? e como eu poderia fazer isso? Muito obrigado pela explicação

Nahim
Visitante
Nahim

Poste uma por favor sobre structs utilizando ponteiro e função tb, no mesmo programa.

Higor
Visitante
Higor

Muito bom, excelente explicação !!