Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #59 da revista programar. Faz já o download aqui!

programador400

Inicializar estrutura em C (Simples)

Mensagens Recomendadas

programador400    0
programador400

Boas,

Queria testar um simples programa que fiz mas não consigo atribuir valores às estruturas que criei.

Consigo inicializar as cenas do tipo Aluno, mas nesse Aluno existe ainda o campo do tipo Avaliacao que pode ser de 2 tipos(ou método A ou B). A minha dúvida é como inicializar cenas desse tipo.

Alguma sugestão:

Aluno a = {"Maxo",65000,1,qqCoisadoTipoAvaliacao};
Aluno b = {"Maxona",58000,0};

As minhas estruturas são:

struct metodoB {
int teste;
int exame;
} ;

struct metodoA {
int mt[6];
int teste;
int exame;
} ;

typedef union {
struct metodoA mA;
struct metodoB mB;
} Avaliacao;

typedef struct aluno {
char nome[60];
int numero;
int metodo;
Avaliacao av;
} Aluno;

Editado por programador400
GeSHi

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
pmg    96
pmg

Se tiveres um compilador C99, podes usar designated initializers

#include <stdio.h>

struct metodoB {
 int teste;
 int exame;
};

struct metodoA {
 int mt[6];
 int teste;
 int exame;
} ;

typedef union {
 struct metodoA mA;
 struct metodoB mB;
} Avaliacao;

typedef struct aluno {
 char nome[60];
 int numero;
 int metodo;
 Avaliacao av;
} Aluno;

int main(void) {
 Aluno a = {.nome = "Luis", .numero = 57752, .metodo = 1,
            .av.mA.mt[0] = 0, .av.mA.mt[1] = 10, .av.mA.mt[2] = 100,
            .av.mA.mt[3] = 1000, .av.mA.mt[4] = 10000, .av.mA.mt[5] = 100000,
            .av.mA.teste = 42, .av.mA.exame = 2013};
 Aluno b = {.nome = "Nela", .numero = 58000, .metodo = 0,
            .av.mB.teste = -100, .av.mB.exame = 0};
 puts(&a != &b ? "OK" : "oops");
}

Podes ver o codigo a "correr" no ideone.

Editado por pmg
ideone

What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
programador400    0
programador400

pmg xelente...funciona perfeito....

nao haverá outra maneira sem tar a escrever campo x = y como acabaste de fazer ?

se não der caga nisso, a maneira como fizeste já serve... só queria mesmo para testar se isto funcionava direito

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
pmg    96
pmg

So inicializando objectos temporarios e copiando-os para o objecto final

NAO TESTADO!

/* NAO TESTADO! */
/* ... includes, typedefs, structs, ... */

int main(void) {
   struct metodoA tmpA = {{0, 10, 100, 1000, 10000, 100000}, 42, 2013};
   struct metodoB tmpB = {-100, 0};
   Aluno a = {"Luis", 57752, 1};
   Aluno b = {"Nela", 58000, 0};

   a.av.ma = tmpA;
   b.av.mb = tmpB;

   /* ... */

}


What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora


×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.