home *** CD-ROM | disk | FTP | other *** search
- /*********************************************************************
- * CH12_08.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)
- {
- if( e_e== entier)
- {
- int *ptr_i= (int*) malloc( e_e);
- if( ptr_i== NULL) return( Echec);
-
- printf(" \n Entrez une valeur entiΦre: ");
- LitInt( ptr_i);
- e->i= *ptr_i;
- free( ptr_i); /* libΘration de la mΘmoire */
- }
- else
- {
- double *ptr_d= (double*) malloc( e_e);
- if( ptr_d== NULL) return( Echec);
-
- printf(" \n Entrez une valeur entiΦre: ");
- LitDble( ptr_d);
- e->d= *ptr_d;
- free( ptr_d); /* 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');
- }
-