Bonjour, je suis en train de faire une fonction qui lit un fichier texte. En gros, à chaque ligne j'ai un mot-clé et une valeur associée

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
 
TEMP 20.3
PRES 2.9
Donc avec fgets() et strtod() ou strtol() j'arrive à récupérer toutes mes valeurs. Mais je pense que strtod() (ou strtol()) ne suffisent pas car il faut avant tout que je contrôle ma chaine de caractères (renvoyée par fgets()). Si je fais la chose suivante :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
 
  double d1, d2, d3;
  d1 = strtod("2.6",NULL);
  printf("d1 = %f\n",d1);
  d2 = strtod("2.6.1",NULL);
  printf("d2 = %f\n",d2);
  d3 = strtod("XXX",NULL);
  printf("d3 = %f\n",d3);
j'ai comme sortie :

d1 = 2.600000
d2 = 2.600000
d3 = 0.000000
ce n'est pas "normal". Comment puis-je m'assurer que d2 et d3 sont en fait faux (et devraient renvoyer une erreur) ? Il faudrait faire une fonction à côté qui analyse la chaine de caractères passée à strtod() (et strtol()) et qui fasse :
1) qui regarde si tous les caractères sont soit un chiffre, soit un point, soit un signe "-"
2) qui vérifie qu'il y a au maximum un seul point (2.6 et non 2.6.1)
3) qui vérifie qu'il y a au maximum un seul signe "-" et que ce dernier s'il existe est en 1e position (-2.6 et non 2-.6 par exemple)

Mais je pense que scanf fait tout ce boulot non ? Il faut "juste" que je vérifie la valeur de retour de cette fonction.

Qu'en pensez-vous ?

Merci de vos remarques