Programme fonctionne avec "float" mais pas "double", pourquo [Résolu]

Signaler
-
 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 !
A voir également:

3 réponses

Messages postés
13291
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
26 novembre 2020
747
bonjour, "cela ne marchait pas", "ça fonctionne".
peux-tu être factuel, qu'as-tu entré, qu'as-tu vu?
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.
Messages postés
495
Date d'inscription
dimanche 7 février 2016
Statut
Membre
Dernière intervention
25 novembre 2020
63
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".
Bonjour,

Merci beaucoup pour cette réponse complète !