2014-06-24 4 views
0

Tout fonctionne correctement, sauf que l'union imbriquée n'est pas mise à jour. J'utilise le compilateur mingw. J'étais juste en train d'apprendre le codage de C et d'essayer des unions imbriquées et d'autres choses quand ce problème est apparu. S'il vous plaît dites-moi ce qui est l'erreur du code, avec un débogage possible. Je n'ai rien trouvé de mal avec ça.Union imbriquée dans une structure renvoyant une valeur de vidage

sortie:

a: 3

b: 3

l.Un: 8

l.b: 5

union: -536870912

#include<stdio.h> 
#include<conio.h> 

typedef struct 
{ 
int a; 
int b; 
} two; 

typedef union 
{ 
int c; 
float d; 
} ad; 

typedef struct 
{ 
int a; 
int b; 
two l; 
ad n; /*This is nested union that is not getting updated*/ 
} one; 

void trr(one *p); 

int main() 
{ 
one tr={2,3,{4,5},{.d=5.43}}; 
trr(&tr); 
printf("a: %d\nb: %d\nl.a: %d\nl.b: %d\nunion: %d",tr.a,tr.b,tr.l.a,tr.l.b,tr.n.d); 
return 0; 
} 

void trr(one *p) 
{ 
p->a=(*p).a+1; 
p->l.a=p->l.a*2; 
} 

Répondre

2

tr.n.d a le type float. Le spécificateur de format %d dit printf pour le traiter comme int cependant. Essayez de changer spécificateur de format à la place %f

printf("a: %d\nb: %d\nl.a: %d\nl.b: %d\nunion: %f" 
//           ^

Sinon, vous pouvez initialiser le membre int de votre syndicat:

one tr={2,3,{4,5},{.c=42}}; 
+3

je pense que vous voulez dire% f –

+0

Merci. Merde j'étais si stupide. Il a résolu le problème. Merci :) – user3772838

+0

@SteveCox Oui, merci, maintenant corrigé – simonc

Questions connexes