Programme fonctionne avec "float" mais pas "double", pourquo

Résolu
Pisces -  
 Pisces -
Bonjour,

J'apprend actuellement le C sur OCR et j'arrive à la partie sur les fonctions, le cours nous montre un code permettant affichant la conversion euros -> francs que voici :
https://openclassrooms.com/fr/courses/19980-apprenez-a-programmer-en-c/14997-les-fonctions#/id/r-2188702

Voulant bidouiller le tout, j'ai voulu permettre à l'utilisateur d'entrer une valeur à convertir, puis l'afficher, il me fallait donc une variable "nombreEntre" qui contiendra la valeur entrée par l'utilisateur à renvoyer à la fonction conversion.
Mon souci est que, dans la fonction conversion de type double, on utilise un double, alors j'ai crée une variable double dans la fonction main mais cela ne marchait pas même avec les %f. J'ai essayé en interchangeant %f et %d, sans effet, puis j'ai tenté de changer le type de la variable nombreEntre en float, et là ça fonctionne.

Voici mon code pour comprendre :

double conversion(double euros) //Type double et type double
{
return 6.55957*euros;
}
int main(int argc, char *argv[])
{
float nombreEntre=0;
/*Ici j'ai déclaré la variable en float pour que ça fonctionne (double ne fonctionnant pas) mais je ne comprends pas pourquoi...*/

printf("10 euros = %fF\n", conversion(10));
printf("50 euros = %fF\n", conversion(50));
printf("100 euros = %fF\n", conversion(100));
printf("200 euros = %fF\n", conversion(200));
printf("Combien voulez-vous convertir ?\n");
scanf("%f", &nombreEntre);
printf("%f en euros donnent %f!\n", nombreEntre, conversion(nombreEntre));

return 0;
}

Si quelqu'un veut bien m'éclairer, merci !

3 réponses

  1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 588
     
    bonjour, "cela ne marchait pas", "ça fonctionne".
    peux-tu être factuel, qu'as-tu entré, qu'as-tu vu?
    0
    1. Pisces
       
      Bonjour, désolé pour la coquille !

      Bien sur, premièrement, en déclarant la variable nombreEntre en double (rien ne change dans le reste du code), et en lancant le programme, peu importe la valeur entrée, le programme affichait "0.000000 en euros donnent 0.00000".

      J'ai ensuite changé les %f en %d en commencant par le premier : en entrant la valeur 50, le programme me renvoie "1112014848 en euros donnent 0.000000!" au lieu de "50 en euros..."
      Puis le deuxieme %f seulement : en entrant 50, le programme affiche "0.000000 en euros donnent -1295595356!"

      J'ai donc remis les %f (les 0.00000 me semblaient moins problematique que les autres reponses", et j'ai changé la variable double nombreEntre en float nombreEntre.

      En esperant avoir ete assez clair, si non, je reste disponible.
      0
  2. Dalfab Messages postés 638 Date d'inscription   Statut Membre Dernière intervention   102
     
    Bonjour,

    Pour lire un
    float
    la commande est
    scanf("%f", &nombreEntreTypeFloat);
    .
    Pour lire un
    double
    la commande est
    scanf("%lf", &nombreEntreTypeDouble);
    . Il ne faut pas oublier d'indiquer le bon type (avec le 'l'). Dans les
    printf()
    pour les
    double
    et les
    float 
    c'est le même format ("%f"), dans les
    scanf()
    on a besoin de taille exacte du type, d'où le "%f" ou "%lf".
    0
  3. Pisces
     
    Bonjour,

    Merci beaucoup pour cette réponse complète !
    0