1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
|
#include <stdio.h>
#include <string.h>
#include <assert.h>
int fget_buf( char * s , size_t nb, FILE * fd )
{ char * c, c1 ;
int err = 0 ;
if( s == NULL || nb <= 0 || fd == 0 ) return err = 2 ;
if( fgets(s, nb , fd ) != NULL )
{
if( ( c = strchr( s , '\n' )) != NULL )
{ *c = '\0' ;
err = 0 ;
return err ;
} else
{
while( (c1 = fgetc(fd) ) != '\n' && c1 != EOF);
err = 1 ;
return err ;
}
}
else
if( strlen(s) ) s[0] = '\0' ;
return err ;
}
int fget_line( char * s , const size_t nb, FILE * fd )
{ int err = 0;
int c ;
size_t w = 0 ;
if( !s || nb <= 0 || ! fd )
{ err = 2 ;
return err ;
}
while ((c = fgetc (fd)) != '\n' && c != EOF)
{ if( w < nb - 1 )
s[w++] = c;
else
{ while((c = fgetc(fd)) != '\n' && c != EOF);
err = 1;
return err ;
}
}
s[w] = '\0';
return err;
}
int main ()
{ char z[128] ;
int r = 1 ;
FILE * fd = 0 ;
fd = fopen("toto.txt", "r") ;
assert( fd != 0 ) ;
while( ! feof(fd) )
{ memset( z, 0 , sizeof(z) ) ;
r = fget_buf( z, sizeof(z), fd ) ; // pas bon
//r = fget_line( z, sizeof(z), fd ) ; // ok
if( r == 0 )
printf("%02d) =>%s\n", strlen(z), z ) ;
else
if( r == 2 )
{ printf("erreur globale\n") ;
fclose(fd) ;
return ;
}
else
if( r == 1 )
{ printf("saisie trop longue\n") ;
fclose(fd) ;
return ;
}
}
fclose(fd) ;
return 0 ;
} |
Partager