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

  1. /*********************************************************************
  2. *  CH12_07.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.     exemple *ptr= ( exemple*) malloc( sizeof( exemple));
  40.         if( ptr== NULL) return( Echec);
  41.  
  42.     if( e_e== entier)
  43.     {
  44.        printf(" \n Entrez une valeur entiΦre: ");
  45.        LitInt( &ptr->i);
  46.        e->i= ptr->i;
  47.     }
  48.     else
  49.     {
  50.        printf(" \n Entrez une valeur rΘelle: ");
  51.        LitDble( &ptr->d);
  52.        e->d= ptr->d;
  53.     }
  54.     free( ptr);                  /* libΘration de la mΘmoire    */
  55.         return( Succes);
  56. }
  57.  
  58. void LitInt( int *entier)
  59. {
  60.     double dble;
  61.     do
  62.         {
  63.        while( scanf("%lf", &dble)!= 1)
  64.         while( getchar() != '\n');
  65.        while( getchar() != '\n');
  66.     }
  67.     while( dble< -32768.0 || dble> 32767.0);
  68.         *entier= (int) dble;
  69. }
  70.  
  71. void LitDble( double *reel)
  72. {
  73.     while( scanf("%lf", reel)!= 1)
  74.         while( getchar() != '\n');
  75.     while( getchar() != '\n');
  76. }
  77.