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

  1. /*********************************************************************
  2. *  CH11_04.C         Passage de structure par pointeur α 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. void LitDate( struct date*);
  16. void EcritDate( struct date*);
  17.  
  18. main( void)
  19. {
  20.     struct date d;
  21.  
  22.     LitDate( &d);
  23.     EcritDate( &d);
  24. }
  25.  
  26. void 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. }
  63.  
  64. void EcritDate( struct date *d1)
  65. {
  66.     printf("\n La date est le: %d/%d/%d",
  67.             d1->jour, d1->mois, d1->annee);
  68. }
  69.  
  70. void LitInt( int *entier)
  71. {
  72.     double dble;
  73.     do
  74.         {
  75.        while( scanf("%lf", &dble)!= 1)
  76.         while( getchar() != '\n');
  77.        while( getchar() != '\n');
  78.     }
  79.     while( dble< -32768.0 || dble> 32767.0);
  80.         *entier= (int) dble;
  81. }
  82.  
  83. /*
  84.  Entrez la date:
  85.                 jour : 1
  86.                 mois : 11
  87.                                 annΘe: 1965
  88.  La date est le: 1/11/1965                       */