home *** CD-ROM | disk | FTP | other *** search
- /*********************************************************************
- * CH12_07.C Unions et ΘnumΘrations *
- *********************************************************************/
-
- #include<stdio.h>
- #include<alloc.h>
-
- typedef union{ int i; double d; } exemple;
- typedef enum{ vide, entier= 2, reel= 8} etat;
- typedef enum{ Echec= -1, Succes, Vrai= 0, Faux} logique;
-
- void LitInt( int*);
- void LitDble( double*);
- logique LitExemple( exemple* const, const etat);
-
- main( void)
- {
- exemple ex;
- etat e_ex= vide;
- logique test;
-
- e_ex= entier;
- test= LitExemple( &ex, e_ex);
-
- if( test== Succes)
- printf(" ex. i= %d ", ex.i);
- else printf("\n Echec de l'allocation de mΘmoire!");
-
- e_ex= reel;
- test= LitExemple( &ex, e_ex);
-
- if( test== Succes)
- printf(" ex. d= %.3lf ", ex.d);
- else printf("\n Echec de l'allocation de mΘmoire!");
- }
-
- logique LitExemple( exemple *const e, const etat e_e)
- {
- exemple *ptr= ( exemple*) malloc( sizeof( exemple));
- if( ptr== NULL) return( Echec);
-
- if( e_e== entier)
- {
- printf(" \n Entrez une valeur entiΦre: ");
- LitInt( &ptr->i);
- e->i= ptr->i;
- }
- else
- {
- printf(" \n Entrez une valeur rΘelle: ");
- LitDble( &ptr->d);
- e->d= ptr->d;
- }
- free( ptr); /* libΘration de la mΘmoire */
- return( Succes);
- }
-
- void LitInt( int *entier)
- {
- double dble;
- do
- {
- while( scanf("%lf", &dble)!= 1)
- while( getchar() != '\n');
- while( getchar() != '\n');
- }
- while( dble< -32768.0 || dble> 32767.0);
- *entier= (int) dble;
- }
-
- void LitDble( double *reel)
- {
- while( scanf("%lf", reel)!= 1)
- while( getchar() != '\n');
- while( getchar() != '\n');
- }
-