Programme fonctionne avec "float" mais pas "double", pourquo
Résolu
Pisces
-
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 !
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:
- Programme fonctionne avec "float" mais pas "double", pourquo
- Double ecran - Guide
- Whatsapp double sim - Guide
- Double driver - Télécharger - Pilotes & Matériel
- Double appel - Guide
- Programme demarrage windows - Guide
3 réponses
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
bonjour, "cela ne marchait pas", "ça fonctionne".
peux-tu être factuel, qu'as-tu entré, qu'as-tu vu?
peux-tu être factuel, qu'as-tu entré, qu'as-tu vu?
Bonjour,
Pour lire un
Pour lire un
Pour lire un
floatla commande est
scanf("%f", &nombreEntreTypeFloat);.
Pour lire un
doublela commande est
scanf("%lf", &nombreEntreTypeDouble);. Il ne faut pas oublier d'indiquer le bon type (avec le 'l'). Dans les
printf()pour les
doubleet les
floatc'est le même format ("%f"), dans les
scanf()on a besoin de taille exacte du type, d'où le "%f" ou "%lf".
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.