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

  1. /*********************************************************************
  2. *  CH11_05.C         Passage de structure par pointeur α une fonction  *
  3. *             Initialisation avec des fonctions spΘcialisΘes  *
  4. *********************************************************************/
  5.  
  6. #include<stdio.h>
  7. #include<string.h>
  8. #include<alloc.h>
  9.  
  10. struct date     {
  11.            int jour;
  12.            int mois;
  13.            int annee;
  14.         };
  15.  
  16. struct client    {
  17.            char prenom[16];
  18.            char nom[24];
  19.            double numero;
  20.            struct date naissance;
  21.         };
  22.  
  23. void LitInt( int*);
  24. void LitDble( double*);
  25. void LitChaine( char*, int);
  26. void LitDate( struct date*);
  27. void EcritDate( struct date*);
  28. void LitClient( struct client*);
  29. void EcritClient( struct client*);
  30.  
  31. main( void)
  32. {
  33.     struct client c;
  34.  
  35.     LitClient( &c);
  36.     EcritClient( &c);
  37. }
  38.  
  39. void LitClient( struct client *c0)
  40. {
  41.     printf("\n Entrez le prΘnom:  ");
  42.     LitChaine( c0->prenom, sizeof( c0->prenom));
  43.     printf(" Entrez le nom:     ");
  44.     LitChaine( c0->nom, sizeof( c0->nom));
  45.     printf(" Entrez le numΘro:  ");
  46.     LitDble( &c0->numero);
  47.     LitDate( &c0->naissance);
  48. }
  49.  
  50. void EcritClient( struct client *c1)
  51. {
  52.     printf("\n Prenom: %s\n Nom:    %s\n Numero: %.0lf",
  53.     c1->prenom, c1->nom, c1->numero);
  54.     EcritDate( &c1->naissance);
  55. }
  56.  
  57. void LitDate( struct date *d0)
  58. {
  59.     printf(" Entrez la date de naissance:\n");
  60.  
  61.     do{
  62.         do{
  63.              printf("\t\t\t\t jour : ");
  64.              LitInt( &d0->jour);
  65.           }
  66.         while( d0->jour<=0 || d0->jour>31);
  67.  
  68.         do{
  69.              printf("\t\t\t\t mois : ");
  70.              LitInt( &d0->mois);
  71.           }
  72.         while( d0->mois<=0 || d0->mois>12);
  73.  
  74.         printf("\t\t\t\t annΘe: ");
  75.         LitInt( &d0->annee);
  76.           }
  77.     while(    (      d0->mois== 2
  78.                 && (    (      d0->annee % 4== 0
  79.                        &&  d0->jour> 29
  80.                     )
  81.                  || (      d0->annee % 4 != 0
  82.                    &&  d0->jour> 28
  83.                 )
  84.                )
  85.                   )
  86.            || (         d0->jour> 30
  87.             && (    d0->mois== 4 || d0->mois== 6
  88.              || d0->mois== 9 || d0->mois== 11
  89.                )
  90.               )
  91.            ||    ( d0->annee< 1901) || ( d0->annee> 2099)
  92.          );
  93. }
  94.  
  95. void EcritDate( struct date *d1)
  96. {
  97.     printf("\n Date de naissance: %d/%d/%d",
  98.             d1->jour, d1->mois, d1->annee);
  99. }
  100.  
  101. void LitInt( int *entier)
  102. {
  103.     double dble;
  104.     do
  105.         {
  106.        while( scanf("%lf", &dble)!= 1)
  107.         while( getchar() != '\n');
  108.        while( getchar() != '\n');
  109.     }
  110.     while( dble< -32768.0 || dble> 32767.0);
  111.         *entier= (int) dble;
  112. }
  113.  
  114. void LitDble( double *reel)
  115. {
  116.     while( scanf("%lf", reel)!= 1)
  117.         while( getchar() != '\n');
  118.     while( getchar() != '\n');
  119. }
  120.  
  121. void LitChaine( char *chaine0, int dim_chaine0)
  122. {
  123.     char *chaine1= ( char*) malloc( 2* 256);
  124.     *(chaine0+ dim_chaine0- 1)='\0';
  125.     while( scanf("%255[^\n]", chaine1)!= 1)
  126.         while( getchar() != '\n');
  127.        while( getchar() != '\n');              
  128.     strncpy( chaine0, chaine1, dim_chaine0- 1);
  129.     free( chaine1);  
  130. }
  131.  
  132. /*
  133.  Entrez le prΘnom:  Petrus
  134.  Entrez le nom:     Albulus
  135.  Entrez le numero:  1651198604021
  136.  Entrez la date de naissance:
  137.                 jour : 1
  138.                 mois : 11
  139.                                 annΘe: 1965
  140.  
  141.  prΘnom: Petrus
  142.  nom:    Albulus
  143.  numero: 1651198604021
  144.  date de naissance: 1/11/1965                                       */
  145.  
  146.