Ir para o conteúdo
programador400

Inicializar estrutura em C (Simples)

Mensagens Recomendadas

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


Ligação para a mensagem
Partilhar noutros sites
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
  • Voto 1

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


Ligação para a mensagem
Partilhar noutros sites
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


Ligação para a mensagem
Partilhar noutros sites
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


Ligação 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.