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

  1. /*********************************************************************
  2. *  CH14_02.C       Allocation de mΘmoire dans le tas lointain pour une *
  3. *               chaεne de caractΦres en utilisant farmalloc() *
  4. *                  Ce programme fonctionne en C++ mais pas en C ANSI *
  5. *********************************************************************/
  6.  
  7. #include<stdio.h>
  8. #include<string.h>             /* pour _fstrncpy()                 */
  9. #include<alloc.h>           /* pour farmalloc() et farfree()    */
  10. #include<process.h>           /* pour exit()                        */
  11.  
  12. void LitU( unsigned*);
  13. void LitChaine( char far*, unsigned);
  14.  
  15. void main( void)
  16. {
  17.     char far *chaine;
  18.     unsigned dim;
  19.  
  20.     printf(" Entrez la dimension de la chaεne de caractΦres: ");
  21.     LitU( &dim);
  22.  
  23.     chaine= ( char far*) farmalloc( dim* sizeof( char));
  24.     if( chaine== NULL)
  25.       {
  26.          printf("\n La mΘmoire disponible est insuffisante!\n");
  27.          exit( 1);
  28.       }
  29.     printf(" Entrez la chaεne:  ");
  30.     LitChaine( chaine, dim);
  31.     printf("\n chaεne:  %Fs", chaine);
  32.  
  33.     farfree( chaine);
  34. }
  35.  
  36. void LitChaine( char far*chaine0, unsigned dim_chaine0)
  37. {
  38.     char far *chaine1;
  39.     if( ( chaine1= ( char far*) farmalloc( 2* 256) )== NULL)
  40.       {
  41.          printf("\n La mΘmoire disponible est insuffisante!\n");
  42.          exit( 1);
  43.       }
  44.     *(chaine0+ dim_chaine0- 1)='\0';
  45.  
  46.     while( scanf("%F255[^\n]", chaine1)!= 1)
  47.         while( getchar() != '\n');
  48.        while( getchar() != '\n');              
  49.     _fstrncpy( chaine0, chaine1, dim_chaine0- 1);
  50.     farfree( chaine1);  
  51. }
  52.  
  53. void LitU( unsigned* entier_u)
  54. {
  55.     double dble;
  56.     do
  57.     {
  58.        while( scanf("%lf", &dble)!= 1)
  59.         while( getchar() != '\n');
  60.        while( getchar() != '\n');
  61.     }
  62.     while( dble< 0.0 || dble> 65535.0);
  63.     *entier_u= ( unsigned) dble;
  64. }
  65.