programador400 Posted May 6, 2013 at 06:03 PM Report #505955 Posted May 6, 2013 at 06:03 PM (edited) 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 May 6, 2013 at 06:20 PM by programador400 GeSHi
pmg Posted May 6, 2013 at 06:22 PM Report #505957 Posted May 6, 2013 at 06:22 PM (edited) 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 May 6, 2013 at 06:24 PM by pmg ideone 1 Report 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!
programador400 Posted May 6, 2013 at 06:33 PM Author Report #505959 Posted May 6, 2013 at 06:33 PM 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
pmg Posted May 6, 2013 at 06:42 PM Report #505960 Posted May 6, 2013 at 06:42 PM 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!
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now