#include int main() { float a = 5; printf("%d", a); return 0; }
Cela donne la sortie:
0
Pourquoi la sortie est-elle zéro?
Il n’imprime pas 5 car le compilateur ne sait pas convertir automatiquement en un entier. Vous devez faire (int)a
vous (int)a
même.
C’est-à-dire,
#include void main() { float a=5; printf("%d",(int)a); }
affiche correctement 5.
Comparez ce programme avec
#include void print_int(int x) { printf("%d\n", x); } void main() { float a=5; print_int(a); }
où le compilateur sait directement print_int
le float en int, en raison de la déclaration de print_int
.
%d
spécificateur de format %d
ne peut être utilisé qu’avec des valeurs de type int
. Vous passez un double
(auquel float
sera converti implicitement). Le comportement résultant est indéfini. Il n’y a pas de réponse à “pourquoi il affiche 0?” question. Tout peut être imprimé. En fait, tout peut arriver.
PS
int main
, pas void main
. conio.h
dans la norme C. Vous devriez soit le convertir en int pour utiliser% d, ou utiliser une chaîne de format pour afficher le float sans précision décimale:
void main() { float a=5; printf("%d",(int)a); // This casts to int, which will make this work printf("%.0f",a); // This displays with no decimal precision }
Vous devez utiliser %f
au lieu de %d
– %d
ne concerne que les entiers, tandis que %f
correspond à la virgule flottante:
#include #include void main() { float a=5; printf("%f",a); }
Vous devez utiliser une autre chaîne de mise en forme. Il suffit de consulter http://www.cplusplus.com/reference/clibrary/cstdio/printf/
printf (“% f”, a);
Vous voudrez utiliser% f pour imprimer une valeur flottante.
par exemple
float a=5; printf("%f",a);
Comme d’autres personnes l’ont dit, vous devez utiliser %f
dans la chaîne de format ou convertir a
en int.
Mais je tiens à souligner que votre compilateur connaît probablement la chaîne de formatage de printf()
et peut vous dire que vous l’utilisez mal. Mon compilateur, avec l’invocation appropriée ( -Wformat
inclut -Wformat
), dit ceci:
$ /usr/bin/gcc -Wformat tmp.c tmp.c: In function 'main': tmp.c:4: warning: format '%d' expects type 'int', but argument 2 has type 'double' $ /usr/bin/gcc -Wall tmp.c tmp.c: In function 'main': tmp.c:4: warning: format '%d' expects type 'int', but argument 2 has type 'double' $
Oh, et encore une chose: vous devez inclure ‘\ n’ dans printf()
pour vous assurer que la sortie est envoyée au périphérique de sortie.
printf("%d\n", a); /* ^^ */
ou utilisez fflush(stdout);
après le printf()
.