2017-08-29 1 views
-5

J'essaye d'établir la sortie du programme c donné ci-dessous mais incapable de comprendre.Quelle devrait être la valeur de si?

Pourquoi est si = 0?

#include<stdio.h> 

int main(void){ 

    float p = 1000; 
    float r = 5; 
    float t = 2; 

    float si = p * r * t/100; 

    printf("SI = %d", si); 

    return 0; 

} 
+4

'printf ("SI =% d", si); 'mais' si' est un 'float': changer en'% f' –

+3

'% d' est pour ** entiers ** – litelite

+1

Pourquoi pensez-vous que' si' est '0'? – melpomene

Répondre

2

Vous êtes en valeur flottante en représentation passait point pendant que vous utilisez %d spécificateur qui oblige printf à attendre un int.

Il n'y a pas de "distribution automatique" lorsque vous transmettez des variables à une fonction variée comme printf, les valeurs sont passées dans la fonction en tant que type de données (ou mises à niveau dans certains cas). langue faiblement typée.

Si vous passez le type avec représentation interne incompatible vous obtiendrez la sortie des ordures.

changement

printf("SI = %d", si); 

à

printf("SI = %f", si); 

ou (si vous souhaitez obtenir une valeur intégrale d'expression)

printf("SI = %d", (int)si); 
+0

aucune idée pourquoi est-ce qu'il obtient 0 au lieu de la valeur de déchets prévue? –

+1

@VikasYadav Considérez: Je vous envoie un 'float' et le place dans la boîte' float'. Vous regardez dans la boîte 'int' et voyez ... rien ... et imprimez cela. Peut-être un 0 restant d'avant, peut-être pas, peut-être que les boîtes se chevauchent? C'est _undefined behavior_. – chux