Utilisation Simple de sprintf-C
J'essaie de comprendre pourquoi un problème plus important se produit, en utilisant un programme plus petit comme exemple. Ce petit programme ne fonctionne pas, m'amenant à croire que c'est ma compréhension de la fonction qui est imparfait.
Pour autant que je (avais) cru, le programme suivant devrait initialiser une chaîne avec jusqu'à 30 caractères, puis prendre le nombre '5' à neuf chiffres significatifs, et le transformer en cette chaîne. Le programme doit ensuite imprimer la valeur '5.00000000'. Cependant, le programme imprime la valeur 7.96788(...). Pourquoi est-ce?
#include <stdio.h>
int main()
{
char word[30];
sprintf(word, "%.9g", 5);
printf(word);
return 0;
}
4 réponses
C'est parce que 5
est un entier (int
), et vous racontez sprintf
prétendre que c'est un double-nombre à virgule flottante (double
). Vous devez changer ceci:
sprintf(word,"%.9g", 5);
À l'un ou l'autre de ces:
sprintf(word,"%.9g", 5.0);
sprintf(word,"%.9g", (double) 5);
, je vois deux problèmes:
Comme déjà dit, vous devez spécifier un
double
au lieu deint
. Votre compilateur peut avoir un commutateur pour imprimer des avertissements dans ces cas (-Wall
dans gcc, par exemple).Imprimer
5.00...
, vous devez utiliser%f
au lieu de%g
.
Qui donne sprintf(word,"%.9f", (double) 5);
comme syntaxe correcte.
Utilisez 5.0
à la place. 5
en soi est un entier et sera bitmangled en ressemblant à un float, qui est où votre 7.xxxx vient de.