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

  1. /*********************************************************************
  2. *  CH11_03.C           Passage de structure par valeur α une fonction  *
  3. *             Initialisation avec des fonctions spΘcialisΘes  *
  4. *********************************************************************/
  5.  
  6. #include<stdio.h>
  7.  
  8. struct date     {
  9.            int jour;
  10.            int mois;
  11.            int annee;
  12.         };
  13.  
  14. void LitInt( int*);
  15. struct date LitDate( struct date);
  16. void EcritDate( struct date);
  17.  
  18. main( void)
  19. {
  20.     struct date d;
  21.  
  22.     d= LitDate( d);
  23.     EcritDate( d);
  24. }
  25.  
  26. struct date LitDate( struct date d0)
  27. {
  28.     printf("\n Entrez la date:\n");
  29.  
  30.     do{
  31.         do{
  32.              printf("\t\t\t\t jour : ");
  33.              LitInt( &d0.jour);
  34.           }
  35.         while( d0.jour<=0 || d0.jour>31);
  36.  
  37.         do{
  38.              printf("\t\t\t\t mois : ");
  39.              LitInt( &d0.mois);
  40.           }
  41.         while( d0.mois<=0 || d0.mois>12);
  42.  
  43.         printf("\t\t\t\t annΘe: ");
  44.         LitInt( &d0.annee);
  45.           }
  46.     while(    (      d0.mois== 2
  47.             && (    (      d0.annee % 4== 0
  48.                    &&  d0.jour> 29
  49.                     )
  50.              || (      d0.annee % 4 != 0
  51.                    &&  d0.jour> 28
  52.                 )
  53.                )
  54.                   )
  55.            || (         d0.jour> 30
  56.             && (    d0.mois== 4 || d0.mois== 6
  57.              || d0.mois== 9 || d0.mois== 11
  58.                )
  59.               )
  60.            ||    ( d0.annee< 1901) || ( d0.annee> 2099)
  61.          );
  62.         return( d0);
  63. }
  64.  
  65. void EcrittDate( struct date d1)
  66. {
  67.     printf("\n La date est le: %d/%d/%d",
  68.             d1.jour, d1.mois, d1.annee);
  69. }
  70.  
  71. void LitInt( int *entier)
  72. {
  73.     double dble;
  74.     do
  75.         {
  76.        while( scanf("%lf", &dble)!= 1)
  77.         while( getchar() != '\n');
  78.        while( getchar() != '\n');
  79.     }
  80.     while( dble< -32768.0 || dble> 32767.0);
  81.         *entier= (int) dble;
  82. }
  83.  
  84. /*
  85.  Entrez la date:
  86.                 jour : 1
  87.                 mois : 11
  88.                                 annΘe: 1965
  89.  La date est le: 1/11/1965                       */