home *** CD-ROM | disk | FTP | other *** search
/ DP Tool Club 17 / CD_ASCQ_17_101194.iso / dos / prg / alb_c10 / chap_12 / ch12_08.c < prev    next >
Encoding:
C/C++ Source or Header  |  1994-09-08  |  1.8 KB  |  81 lines

  1. /*********************************************************************
  2. *  CH12_08.C                               Unions et ΘnumΘrations  *
  3. *********************************************************************/
  4.  
  5. #include<stdio.h>
  6. #include<alloc.h>
  7.  
  8. typedef union{ int i; double d; } exemple;
  9. typedef enum{ vide, entier= 2, reel= 8} etat;
  10. typedef enum{ Echec= -1, Succes, Vrai= 0, Faux} logique;
  11.  
  12. void LitInt( int*);
  13. void LitDble( double*);
  14. logique LitExemple( exemple* const, const etat);
  15.  
  16. main( void)
  17. {
  18.     exemple ex;
  19.     etat e_ex= vide;
  20.         logique test;
  21.  
  22.     e_ex= entier;
  23.     test= LitExemple( &ex, e_ex);
  24.  
  25.     if( test== Succes)
  26.         printf(" ex. i= %d ", ex.i);
  27.         else printf("\n Echec de l'allocation de mΘmoire!");
  28.  
  29.     e_ex= reel;
  30.     test= LitExemple( &ex, e_ex);
  31.  
  32.     if( test== Succes)
  33.         printf(" ex. d= %.3lf ", ex.d);
  34.         else printf("\n Echec de l'allocation de mΘmoire!");
  35. }
  36.  
  37. logique LitExemple( exemple* const e, const etat e_e)
  38. {
  39.     if( e_e== entier)
  40.     {
  41.        int *ptr_i= (int*) malloc( e_e);
  42.        if( ptr_i== NULL) return( Echec);
  43.  
  44.        printf(" \n Entrez une valeur entiΦre: ");
  45.        LitInt( ptr_i);
  46.        e->i= *ptr_i;
  47.        free( ptr_i);             /* libΘration de la mΘmoire    */
  48.     }
  49.     else
  50.     {
  51.        double *ptr_d= (double*) malloc( e_e);
  52.        if( ptr_d== NULL) return( Echec);
  53.  
  54.        printf(" \n Entrez une valeur entiΦre: ");
  55.        LitDble( ptr_d);
  56.        e->d= *ptr_d;
  57.        free( ptr_d);             /* libΘration de la mΘmoire    */
  58.     }
  59.     return( Succes);
  60. }
  61.  
  62. void LitInt( int *entier)
  63. {
  64.     double dble;
  65.     do
  66.         {
  67.        while( scanf("%lf", &dble)!= 1)
  68.         while( getchar() != '\n');
  69.        while( getchar() != '\n');
  70.     }
  71.     while( dble< -32768.0 || dble> 32767.0);
  72.         *entier= (int) dble;
  73. }
  74.  
  75. void LitDble( double *reel)
  76. {
  77.     while( scanf("%lf", reel)!= 1)
  78.         while( getchar() != '\n');
  79.     while( getchar() != '\n');
  80. }
  81.