Struct - Data Structure


  No capítulo anterior de listas e matrizes, vimos que éramos obrigado a criá-las com o mesmo tipo de dados (int, float, char, etc). Se desejássemos guardar o nome (string), a idade (int) e a nota (double) de uma turma de alunos em uma lista, isso não seria possível.
  Para resolver esta questão, vamos criar uma estrutura de dados contendo diversos tipos primitivos dentro dela, ou seja, uma espécie de "variável composta".
  Na linguagem C, o STRUCT é o responsável pela criação de variáveis compostas (o type do Pascal que define registros).

  Sintaxe:
 struct <nome_do_modelo_de_variavel_composta>
 {
   conjunto_de_variaveis_primitivas;
 };
  Variáveis primitivas do C: int, float, char, double, etc.

  O exemplo de variável composta para o problema da turma de alunos pode ser resolvido assim:
struct modelo_aluno
{
  char nome[20];
  int idade;
  double nota;
};
  A declaração do "struct" não cria variáveis na memória. Na realidade, ela cria um novo tipo de variável. Para utilizá-lo, é necessário criar uma variável nova, do tipo "modelo_aluno".
  struct modelo_aluno aluno;
  Agora sim. A variável aluno foi criada e possui as características do "modelo_aluno".

  O acesso ao interior da estrutura "modelo_aluno" é feito através do nome da variável da estrutura, precedido de um ponto. Por exemplo, para acessar a idade da variável aluno, faz-se:
 aluno.idade = 10;

  Outro exemplo:
struct modelo_ficha
{
  char nome[40];
  int dia, mes, ano;
  char endereco[100];
};

  As variáveis também podem ser declaradas após o struct, separadas por vírgulas:
struct modelo_ficha
{
  char nome[40];
  int dia, mes, ano;
  char endereco[100];
} ficha1, ficha2;

  O programa a seguir exemplifica o uso de uma struct.
#include <stdio.h>
#include <string.h>

struct modelo_ficha
{
  char nome[40];
  int dia, mes, ano;
  char endereco[100];
};

struct modelo_ficha ficha;

void main(void)
{
  strcpy(ficha.nome,"Guga");
  ficha.dia = 10;
  ficha.mes =  9;
  ficha.ano = 1976;
  strcpy(ficha.endereco,"Floripa");
}

  O programa acima permite o uso de apenas uma ficha. Se desejarmos mais, devemos criar um vetor do tipo "modelo_ficha".
#include <stdio.h>
#include <string.h>

struct modelo_ficha
{
  char nome[40];
  int dia,mes,ano;
  char endereco[100];
} ficha[20];

void main(void)
{
  char *palavra;
  int i;
  for (i=0; i<20; i++)
  {
    printf("\nNome: ");
    scanf("%s",palavra);
    strcpy(ficha[i].nome,palavra);
    printf("Dia: ");
    scanf("%d",&ficha[i].dia);
    printf("Mes: ");
    scanf("%d",&ficha[i].mes);
    printf("Ano: ");
    scanf("%d",&ficha[i].ano);
    printf("Endereco: ");
    scanf("%s",palavra);
    strcpy(ficha[i].endereco,palavra);
  }
}


/MARMSX/CURSOS/C--