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

Résolu/Fermé
Pisces - 26 oct. 2020 à 15:48
 Pisces - 26 oct. 2020 à 16:41
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

yg_be Messages postés 23355 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 28 novembre 2024 Ambassadeur 1 554
26 oct. 2020 à 16:28
bonjour, "cela ne marchait pas", "ça fonctionne".
peux-tu être factuel, qu'as-tu entré, qu'as-tu vu?
0
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
Dalfab Messages postés 706 Date d'inscription dimanche 7 février 2016 Statut Membre Dernière intervention 2 novembre 2023 101
26 oct. 2020 à 16:36
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
Bonjour,

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