7 Réponses :
Vous devez utiliser une chaîne de formatage différente, il suffit de regarder
http://www.cplusplus.com/reference/clibrary/cstdio/printf/ < / a> p>
printf ("% f", a); p>
Il n'imprime pas 5 car le compilateur ne sait pas automatiquement à un entier. Vous devez faire c'est-à-dire à dire, p> sortie correctement 5. p> Comparez ce programme avec P> (int) a code> vous-même.
#include<stdio.h>
void print_int(int x)
{
printf("%d\n", x);
}
void main()
{
float a=5;
print_int(a);
}
Plus précisément, il ne sait pas automatiquement à un entier dans une fonction variadique, mais c'est plutôt difficile à expliquer au débutant, en particulier car il semble certainement que le compilateur C devrait connaître les types concernés.
Outre la variable-ness, sachant quel type à mouler nécessiterait que le compilateur d'analyser la chaîne a été transmis à imprimerf et déduire quel type A est censé être. GCC peut facilement gérer une "% d \ n" constante et vous avertir lorsque vous avez passé -wall code>, mais bonne chance lorsque la chaîne n'est pas codée dur dans le programme!
@Markrushakoff Les programmeurs raisonnables n'utilisent pas de chaînes de format non constant, car ils introduisent un problème de sécurité.
P.s. P>
% d code> Spécificateur de format ne peut être utilisé que avec des valeurs de type
int code>. Vous passez un
double code> (quel
float code> sera implicitement converti en). Le comportement résultant est indéfini. Il n'y a pas de réponse à "pourquoi il imprime 0?" question. Tout peut être imprimé. En fait, tout peut arriver. P>
int Page principale code>, pas
void principal code>. li>
conio.h code> dans la norme c. li>
ol>
+1 pour souligner que Printf () est passé un double. J'ai corrigé le code pour supprimer le superflu et non pertinent #include
Vous voudrez utiliser% F pour imprimer une valeur de flotteur.
par exemple p>
Vous devez le jeter sur un Int pour utiliser% d ou utiliser une chaîne de format pour afficher le flotteur sans précision décimale:
int 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 code> au lieu de
% d code> -
% d code> est juste pour les entiers tandis que
% f code > est pour le point flottant:
Comme les autres personnes ont dit, vous devez utiliser mais je veux souligner que Votre compilateur est probablement connu sur oh, et une autre chose: vous devriez inclure '\ n' dans le % f code> dans la chaîne de format ou convertir
a code> sur int.
printf () code> S chaîne de format et peut vous dire que vous utilisez le problème. Mon compilateur, avec l'invocation appropriée (
-wall code> inclut
-wformat code>), dit ceci: p>
printf () code> pour vous assurer que la sortie est envoyée sur le périphérique de sortie. P>
printf("%d\n", a);
/* ^^ */
#include code> supprimé car pas nécessaire - d'autres nettoyages aussi.