problème convertion d'une chaine en double - C - Programmation
Marsh Posté le 21-06-2010 à 18:00:06
Il ne manquerait pas un include necessaire (stdlib.h ou stdio.h)?
Marsh Posté le 21-06-2010 à 18:23:16
Pour afficher un double avec printf() c'est %f. Pour saisir un double avec scanf, là c'est %lf. Ha, ha, les cotés obscurs du C. Dans le cas de printf, c'est à cause de la promotion implicite des float en double dans un appel type vararg. %lf doit certainement correspondre à un long double (en tous les cas pas sous Windows).
Marsh Posté le 21-06-2010 à 18:37:32
Mes include's sont bien dedans, j'ai juste recopié le code.
et non même avec 'f' au lieu de 'lf' ça ne marche pas j'obtiens toujours un nombre exorbitant.
merci
Marsh Posté le 21-06-2010 à 19:27:23
tpierron a écrit : Pour afficher un double avec printf() c'est %f. Pour saisir un double avec scanf, là c'est %lf. Ha, ha, les cotés obscurs du C. Dans le cas de printf, c'est à cause de la promotion implicite des float en double dans un appel type vararg. %lf doit certainement correspondre à un long double (en tous les cas pas sous Windows). |
%lf fonctionne aussi pour formater des doubles avec fprintf and co. Pour les long double (fprintf et fscanf), c'est %Lf.
Marsh Posté le 21-06-2010 à 19:28:25
jasinski13 a écrit : Mes include's sont bien dedans, j'ai juste recopié le code. |
Donne un code complet reproduisant le problème. Ce que tu donnes fonctionne si je le complète comme il se doit.
Marsh Posté le 21-06-2010 à 19:52:39
mon fichier: main.c
Code :
|
mon fichier string.c:
Code :
|
mon fichier string.h
Code :
|
Voilà mon code complet, bien séparés comme j'ai appris sur internet
merci d'avance
Marsh Posté le 21-06-2010 à 20:03:18
Je te conseille fortement de renommer ton fichier string.h en autre chose pour éviter la confusion avec la version standard.
Et le problème est que tu n'as pas de prototype pour lireDouble() dans main(), donc le code est généré comme s'il retournait un int et pas un double... Inclus ta version (renommée!) de string.h dans main.c.
Et compile en activant un peu plus de warnings, les compilateurs devraient t'indiquer que tu fais usage de cette possibilité (ce qui est considéré de mauvais style depuis plus de 20 ans).
Marsh Posté le 21-06-2010 à 20:30:00
Ok merci du conseil, voilà tout fonctionne comme voulu merci bien
Marsh Posté le 21-06-2010 à 17:46:56
Bonjour, donc pour être le plus clair possible voilà mon code:
J'ai bien sûr inclus mes bibliothèque, etc.
Mon soucis est que si j'entre un nombre tel que '12' j'obtiens '0.00000' et si j'entre un nombre tel que '12.23' là j'obtiens un nombre exorbitant
Merci de votre aide