Petit soucis de debutant, certainement vraiment tres bete... [C] - C - Programmation
Marsh Posté le 04-06-2007 à 19:36:28
Code :
|
Pourquoi ne pas avoir créé de variable de type long?
Marsh Posté le 04-06-2007 à 19:40:50
merci ca marche, mais j'avais lu qu'il fallait mettre %lf, pourquoi ?
Marsh Posté le 04-06-2007 à 19:46:49
ReplyMarsh Posté le 04-06-2007 à 19:52:57
existe t-il un type qui me permette de rentrer des valeurs entieres ,decimales ou negatives (-65.384624) par exemple,
autre que float qui me permette de ne pas afficher 6 zero derriere la virgule ?
Marsh Posté le 04-06-2007 à 20:03:04
minokitaro a écrit : %lf ou %ld = long float ou double c'est pareil |
1) %lf ça n'existe pas, même si beaucoup de compilateurs l'accèptent comme équivalent à %f
2) %ld c'est un long, pas un "long float" ni un double
double c'est %f, point.
Marsh Posté le 04-06-2007 à 22:45:44
matafan a écrit : 1) %lf ça n'existe pas, même si beaucoup de compilateurs l'accèptent comme équivalent à %f |
1) faux
2) vrai
et archi faux
Marsh Posté le 05-06-2007 à 07:55:19
tomsoft a écrit : existe t-il un type qui me permette de rentrer des valeurs entieres ,decimales ou negatives (-65.384624) par exemple, autre que float |
Le type "double" qui fait 2 fois la taille d'un float. Et certains compilos acceptent le type "long double" qui n'est pas standard et qui fait 2,5 fois la taille d'un float
tomsoft a écrit : qui me permette de ne pas afficher 6 zero derriere la virgule ? |
L'affichage se fait au printf. Tu peux compléter ton "%f" par des options situées entre "%" et "f". Exemple "%.2f" => t'affichera que 2 chiffres après la virgule. Lis avec attention le "man printf"...
Marsh Posté le 05-06-2007 à 08:03:45
heu oui donc
%lf pour double ou long float,
%f pour float,
%ld pour long int ou long tout court,
%d pour int
pour la precision apres la virgule => %.2f pour 2chiffre apres la virgule
Marsh Posté le 05-06-2007 à 08:12:26
Non, %f c'est pour un double.
Pour compéter les remarques toujours très précsises et détaillées de Taz :
1) Il y a effectivement %lf en C99, qui est équivalent à %f
2) Pour double il y a évidemment aussi les formes %e; %g et %a
Marsh Posté le 05-06-2007 à 08:23:12
t'es sur que %f c'est pour double ?
parce que quand je reprend le code de tomsoft et je met en double ses variable avec %f ca n'affiche plus rien
Marsh Posté le 05-06-2007 à 09:23:15
Oui, je suis sûr. Si ça n'affiche plus rien, il y a un problème ailleurs. Poste ton code si tu veux.
f,F The double argument is rounded and converted to decimal notation |
Marsh Posté le 05-06-2007 à 09:43:38
Code :
|
voila.
tous s'affiche correctement lorsque je remplace les %f par %lf, mais pas avec les %f.
Marsh Posté le 05-06-2007 à 09:44:00
matafan a écrit : Oui, je suis sûr. Si ça n'affiche plus rien, il y a un problème ailleurs. Poste ton code si tu veux.
|
si tu regardes le man de printf ...
Marsh Posté le 05-06-2007 à 09:44:26
minokitaro a écrit :
|
toujours faux.
Marsh Posté le 05-06-2007 à 09:46:35
Sve@r a écrit : Et certains compilos acceptent le type "long double" qui n'est pas standard et qui fait 2,5 fois la taille d'un float |
Puisque c'est C99, ils ont raison
Marsh Posté le 05-06-2007 à 09:53:15
bon pour ceux qui savent lire
float : printf %f / scanf %f
double : printf %f / scanf %lf
[C99] long double : printf %Lf / scanf %Lf
Marsh Posté le 05-06-2007 à 09:53:48
et quand on aura résolu ce problème, on pourra passer aux choses sérieuses et dire que scanf est mauvais.
Marsh Posté le 05-06-2007 à 10:41:40
ReplyMarsh Posté le 05-06-2007 à 17:41:07
Taz a écrit : float : printf %f / scanf %f |
Ah ? On précise pas "lf" pour le printf d'un double ou c'est un copier/coller qui a foiré ???
Taz a écrit : [C99] long double : printf %Lf / scanf %Lf |
Autant compléter
char: printf %c / scanf %c
int: printf %d / scanf %d
unsigned int: printf %u / scanf %u
short: printf %hd / scanf %hd
unsigned short: printf %hu / scanf %hu
long: printf %ld / scanf %ld
unsigned long: printf %lu / scanf %lu
char[] ou char*: printf %s / scanf %s (avec évidemment toutes les vérifications qui s'imposent quand on traite des chaînes ou des pointeurs sur des chaînes)
Marsh Posté le 06-06-2007 à 08:43:14
Décidément personne ne veut me croire... Pour printf, %f et %lf c'est la même chose, sauf que %lf c'est du C99.
Marsh Posté le 06-06-2007 à 09:18:00
T'as qu'à appeler ED si tu ne crois ni la documentation, ni moi-même. Pour ma part, "%lf" a un comportement indéterminé avec printf
Marsh Posté le 06-06-2007 à 09:33:20
Je ne trouve pas le document normatif qui parle des formats de printf en C99, mais si tu vas sur http://gcc.gnu.org/c99status.html tu verra que "%lf conversion specifier llowed in printf" est marqué "Done", ce qui signifie que c'est implémenté dans gcc, et laisse entendre que c'est demandé par la norme C99.
Marsh Posté le 08-06-2007 à 12:32:47
Citation : l (ell) Specifies that a following d, i, o, u, x, or X conversion specifier applies to a |
http://www.open-std.org/JTC1/SC22/ [...] /n1124.pdf 276 Library §7.19.6.1
Marsh Posté le 08-06-2007 à 15:22:03
Ca va dans mon sens... La norme dit que le "l" devant le "f" n'a aucun effet, ce qui implique en particulier que ça ne doit pas générer d'erreur. Un compilo C99 doit accepter %lf.
Marsh Posté le 08-06-2007 à 15:52:32
si tu veux tu peux aussi foutre des (void)0; dans tous les sens
Marsh Posté le 04-06-2007 à 19:23:02
je debute en C apres avoir passé sur VB, Html, PHP,
et la j'ai un soucis, tout me parrait bon, mais ca ne marche point
je suis sous ubuntu, j'utilise code::blocks :
je voudrais que le prog me multiplie mes 2 nombres, et me la renvoie,
donc ca me fais ca :
ou est le probleme ?