Question

    

Cette question a déjà une réponse ici:

         

Je suis arrivé ce code C.

#include <stdio.h>

int main(void)
{
        int n, d, i;
        double t=0, k;
        scanf("%d %d", &n, &d);
        t = (1/100) * d;
        k = n / 3;
        printf("%.2lf\t%.2lf\n", t, k);
        return 0;
}

Je veux savoir pourquoi ma variable 't' est toujours égale à zéro (dans la fonction printf)?

Était-ce utile?

La solution

parce que dans cette expression

t = (1/100) * d;

1 et 100 sont des valeurs entières, tronque de division de nombre entier, de sorte que cela, il est le même que celui

t = (0) * d;

vous avez besoin d'en faire une constante de flotteur comme celui-ci

t = (1.0/100.0) * d;

vous pouvez également faire la même chose avec cette

k = n / 3.0;

Autres conseils

Vous utilisez la division entière, et va toujours 1/100 pour arrondir à zéro dans la division entière.

Si vous voulez faire la division à virgule flottante et tronque simplement le résultat, vous pouvez vous assurer que vous utilisez pointeur flottant littéraux à la place, et d seront convertis implicitement pour vous:

t = (int)((1.0 / 100.0) * d);

Je pense que à cause de

t = (1/100) * d;

1/100 comme division entière = 0

0 alors * d est toujours égale à 0

si vous faites 1,0 / 100,0 je pense que ce sera correctement

t = (1/100) * d; 

C'est égal à toujours 0, vous pouvez le faire

t=(1%100)*d 

et l'ajouter à 0

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top