Jump to content
programador400

Inicializar estrutura em C (Simples)

Recommended Posts

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;

Edited by programador400
GeSHi

Share this post


Link to post
Share on other 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.

Edited by pmg
ideone
  • Vote 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!

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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!

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.