home *** CD-ROM | disk | FTP | other *** search
- /*********************************************************************
- * CH14_06.C Allocation de mémoire à un tableau avec calloc() *
- * test préalable de la mémoire avec coreleft() *
- * Ce programme ne fonctionne pas en C ANSI ni sous "Windows" *
- *********************************************************************/
-
- #include<stdio.h>
- #include<alloc.h> /* pour calloc(), coreleft() et free() */
-
- typedef enum{ Echec= -1, Succes, Vrai= 0, Faux} logique;
-
- void LitU( unsigned*);
- void EcritTab( double*, unsigned);
-
- main( void)
- {
- double *tab; /* Nom du tableau */
- unsigned n; /* n: Dimension du tableau */
- unsigned long libre;
- logique test;
-
- do
- {
- printf("\n Entrez la dimension du tableau: ");
- LitU( &n);
-
- test= Succes;
- libre= coreleft();
- if( libre< n* sizeof( double))
- {
- printf("\n Vous ne disposez que de %lu octets\n"
- " la dimension max de votre tableau est: %lu",
- libre, libre/ sizeof( double));
- test= Echec;
- }
- }
- while( test!= Succes);
-
- tab= ( double*) calloc( n, sizeof( double) );
- EcritTab( tab, n);
- free( tab);
- }
-
- void EcritTab( double *tableau, unsigned dim_tab)
- {
- unsigned i;
- double *ptr;
- ptr= tableau;
- printf("\n (tableau)= ");
- for( i= 0; i< dim_tab; i++)
- printf("\n\t [%u]= %lf", i, *( ptr++));
- }
-
- void LitU( unsigned* entier_u)
- {
- double dble;
- do
- {
- while( scanf("%lf", &dble)!= 1)
- while( getchar() != '\n');
- while( getchar() != '\n');
- }
- while( dble< 0.0 || dble> 65535.0);
- *entier_u= ( unsigned) dble;
- }
-