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
|
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>
/*
Attention, le code source ci-dessous
est susceptible de comporter des erreurs.
*/
bool f_get_numeric( long *dt ){
char *p = NULL;
char buffer[BUFSIZ];
/* no crash test snip memset return */
(void)memset(buffer, 0x0, BUFSIZ);
errno = 0x0;
if( NULL == fgets(buffer, BUFSIZ, stdin) ){
(void)fprintf(stderr, "Error(%d)\t:%s\n",
errno, strerror(errno) );
return false;
}
*dt = strtol(buffer, &p, 0xA);
if( errno == ERANGE ){
(void)fprintf(stderr,
"Error(%d)\t: valeur hors plage\n\t:%s\n",
errno, strerror(errno) );
return false;
}else if( buffer == p ){
(void)fprintf(stderr, "Erreur\t: Saisie no valid\n");
return false;
}else if('\n' != *p && '\0' != *p){
(void)fprintf(stderr,
"Erreur\t: detection de caractere\n");
return false;
}
return true;
}
int main( void ){
long dt = 0x0;
if( false == f_get_numeric(&dt) )
return EXIT_FAILURE;
(void)fprintf(stderr, "(ret)\t:%ld\n", dt );
return EXIT_SUCCESS;
} |
Partager