Un problème avec l'union en C

IHECinformaticien Messages postés 9 Date d'inscription jeudi 19 février 2009 Statut Membre Dernière intervention 29 mars 2009 - 29 mars 2009 à 01:38
TychoBrahe Messages postés 1309 Date d'inscription samedi 31 janvier 2009 Statut Membre Dernière intervention 5 juin 2013 - 29 mars 2009 à 14:43
Bonsoir/Bonjour, dans le code source au dessous j'ai défini une union qui contient 3 variables: une de type entier, l'autre de type réel et la dernière de type caractère.
Pour chacun des membres de l'union j'ai lu la valeur correspondante au clavier ensuite j' ai affiché l'adresse du membre mais mon problème c'est que je n'ai pas sût comment afficher le contenu du membre. J'ai fait un essai mais ça n'a pas marché.Voici mon essai & merci infiniment.

#include<stdio.h>
void main()
{
 union abc /* union qui s'appelle abc*/
 { int i;
   float f;
   char c;
 };
 union abc X; /* X variable de type union abc*/
 printf("Donner un entier\n");
 scanf("%d",&X.i);
 printf("Donner un reel\n");
 scanf("%f",&X.f);
 printf("Donner un caractere\n");
 scanf("%s",&X.c);

 printf("l'adresse du membre entier est %d\n",&X.i);
 printf("son contenu est %d\n",X.i);

 printf("l'adresse du membre reel est %d\n",&X.f);
 printf("son contenu est %f\n",X.f);

 printf("l'adresse du membre entier est %d\n",&X.c);
 printf("son contenu est %s\n",X.c);
}

1 réponse

TychoBrahe Messages postés 1309 Date d'inscription samedi 31 janvier 2009 Statut Membre Dernière intervention 5 juin 2013 12
29 mars 2009 à 14:43
Salut,

Mêmes remarques que d'habitude, déclare ton union en dehors de toute
fonction et fait donc retourner un int a ta fonction main.

Ensuite tu devrais relire les cours sur le C car visiblement tu n'as rien compris au principe des unions. En gros, une union déclare plusieurs types sur la même zone mémoire. Deux conséquences directes :
 - L'union a pour taille la taille du plus gros composant.
 - La modification d'un seul composant modifie les autres.

Bref, je te laisse relire ce que j'ai mis et comprendre la bêtise que tu as fait.
0
Rejoignez-nous