home *** CD-ROM | disk | FTP | other *** search
- /*********************************************************************
- * CH11_05.C Passage de structure par pointeur α une fonction *
- * Initialisation avec des fonctions spΘcialisΘes *
- *********************************************************************/
-
- #include<stdio.h>
- #include<string.h>
- #include<alloc.h>
-
- struct date {
- int jour;
- int mois;
- int annee;
- };
-
- struct client {
- char prenom[16];
- char nom[24];
- double numero;
- struct date naissance;
- };
-
- void LitInt( int*);
- void LitDble( double*);
- void LitChaine( char*, int);
- void LitDate( struct date*);
- void EcritDate( struct date*);
- void LitClient( struct client*);
- void EcritClient( struct client*);
-
- main( void)
- {
- struct client c;
-
- LitClient( &c);
- EcritClient( &c);
- }
-
- void LitClient( struct client *c0)
- {
- printf("\n Entrez le prΘnom: ");
- LitChaine( c0->prenom, sizeof( c0->prenom));
- printf(" Entrez le nom: ");
- LitChaine( c0->nom, sizeof( c0->nom));
- printf(" Entrez le numΘro: ");
- LitDble( &c0->numero);
- LitDate( &c0->naissance);
- }
-
- void EcritClient( struct client *c1)
- {
- printf("\n Prenom: %s\n Nom: %s\n Numero: %.0lf",
- c1->prenom, c1->nom, c1->numero);
- EcritDate( &c1->naissance);
- }
-
- void LitDate( struct date *d0)
- {
- printf(" Entrez la date de naissance:\n");
-
- do{
- do{
- printf("\t\t\t\t jour : ");
- LitInt( &d0->jour);
- }
- while( d0->jour<=0 || d0->jour>31);
-
- do{
- printf("\t\t\t\t mois : ");
- LitInt( &d0->mois);
- }
- while( d0->mois<=0 || d0->mois>12);
-
- printf("\t\t\t\t annΘe: ");
- LitInt( &d0->annee);
- }
- while( ( d0->mois== 2
- && ( ( d0->annee % 4== 0
- && d0->jour> 29
- )
- || ( d0->annee % 4 != 0
- && d0->jour> 28
- )
- )
- )
- || ( d0->jour> 30
- && ( d0->mois== 4 || d0->mois== 6
- || d0->mois== 9 || d0->mois== 11
- )
- )
- || ( d0->annee< 1901) || ( d0->annee> 2099)
- );
- }
-
- void EcritDate( struct date *d1)
- {
- printf("\n Date de naissance: %d/%d/%d",
- d1->jour, d1->mois, d1->annee);
- }
-
- void LitInt( int *entier)
- {
- double dble;
- do
- {
- while( scanf("%lf", &dble)!= 1)
- while( getchar() != '\n');
- while( getchar() != '\n');
- }
- while( dble< -32768.0 || dble> 32767.0);
- *entier= (int) dble;
- }
-
- void LitDble( double *reel)
- {
- while( scanf("%lf", reel)!= 1)
- while( getchar() != '\n');
- while( getchar() != '\n');
- }
-
- void LitChaine( char *chaine0, int dim_chaine0)
- {
- char *chaine1= ( char*) malloc( 2* 256);
- *(chaine0+ dim_chaine0- 1)='\0';
- while( scanf("%255[^\n]", chaine1)!= 1)
- while( getchar() != '\n');
- while( getchar() != '\n');
- strncpy( chaine0, chaine1, dim_chaine0- 1);
- free( chaine1);
- }
-
- /*
- Entrez le prΘnom: Petrus
- Entrez le nom: Albulus
- Entrez le numero: 1651198604021
- Entrez la date de naissance:
- jour : 1
- mois : 11
- annΘe: 1965
-
- prΘnom: Petrus
- nom: Albulus
- numero: 1651198604021
- date de naissance: 1/11/1965 */
-
-