#include <stdlib.h> // <cstdlib> en C++
double strtod( const char * theString, char ** end );
Cette fonction, signifiant string to double, permet de transformer une chaîne de caractères, contenant la représentation textuelle d'un nombre flottant en une donnée typée double.
123.456toto
, seuls les caractères 123.456
seront pris en charge et en sortie de l'appel de fonction, end
pointera sur
le premier 't'
(de "toto"
). Ce paramètre peut aussi être fixé à NULL
et, dans ce cas, il ne sera pas modifié par la fonction.
La valeur de retour, de type double
, contient la valeur associée à la chaîne de caractères passée en paramètre.
Si aucune valeur flottante n'a pu être décodée à partir de la chaîne alors la valeur de retour sera 0.0 et le pointeur stocké à l'intérieur du pointeur end
,
passé en second paramètre, sera égal à theString
(sauf si end
est null, bien entendu). C'est de cette manière que vous pourrez distinguer le cas
ou la chaîne de caractères contient "0.0" du cas ou aucune valeur flottante ne peut être décodée.
Si la valeur à décoder n'est pas représentable par le type double
, la variable errno sera fixée à ERANGE
et la fonction
retournera la valeur HUGE_VAL.
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 |
#include <assert.h> #include <stdio.h> #include <stdlib.h> int main() { // Exemple d'utilisation sur une mauvaise valeur char * badString = "notPossible"; char * endPtr; double value = strtod( badString, &endPtr ); if ( endPtr == badString ) { printf( "Bad string format: %s - value == %lf\n", endPtr, value ); } else { printf( "value == %lf\n", value ); } // Exemple d'utilisation sur une valeur correct char * correctString = "123.456"; value = strtod( correctString, &endPtr ); if ( endPtr == badString ) { printf( "Bad string format: %s - value == %lf\n", endPtr, value ); } else { printf( "value == %lf\n", value ); } // Exemple d'extraction de plusieurs valeurs consécutives dans la chaîne. correctString = "12.3 8.75 10.11"; double value1 = strtod( correctString, &endPtr ); assert( correctString != endPtr ); correctString = endPtr; double value2 = strtod( correctString, &endPtr ); assert( correctString != endPtr ); correctString = endPtr; double value3 = strtod( correctString, &endPtr ); assert( correctString != endPtr ); printf( "Values : %lf - %lf - %lf\n", value1, value2, value3 ); return EXIT_SUCCESS; } |
Voici l'affichage produit par cet exemple :
$> gcc -o Essai Essai.c $> ./Essai Bad string format: notPossible - value == 0.000000 value == 123.456000 Values : 12.300000 - 8.750000 - 10.110000 $>
Améliorations / Corrections
Vous avez des améliorations (ou des corrections) à proposer pour ce document : je vous remerçie par avance de m'en faire part, cela m'aide à améliorer le site.
Emplacement :
Description des améliorations :