Converting to ling int from long double

Fermé
zazou - 14 avril 2009 à 15:31
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 14 avril 2009 à 15:45
Bonjour,
je suis entrain de réviser mon cours de programmation et j'ai une erreur que je n'avais encore jamais vue...
[Warning] converting to `long int' from `long double'
Savez vous de quoi il est question?

voici mon Code au cas où vous en avez besoin... :

#include <stdlib.h>
#include <stdio.h>

/* Ma Fonction convertisseur €-Fb*/

long double EuroFb ( int euro ){
return 40.3399 * euro;
}

/* Ma Fonction convertisseur €-Fb*/

long double FbEuro ( int Fb ){
return Fb / 40.3399;
}

/* Le corp du pgm */

int main(){

long EuroConvertir = 0;
long FbConvertit = 0;
long EuroConvertit = 0;
long FbConvertir = 0;
int choix = 0;


printf(" Pour convertir des Euro en Franc Belge taper [1]\n");
printf(" Pour convertir des Franc Belge en Euro taper [2]\n");
scanf("%i", &choix);

switch (choix)

case 1: system("cls");
printf("Entrez le montant en euro a convertir en Franc Belge\n");
scanf("%ld", &EuroConvertir);
FbConvertit = EuroFb(EuroConvertir);
printf("Cela fait: %iFb \n\n", FbConvertit);

case 2: system("cls");
printf("Entrez le montant en Fb a convertir en Euro \n");
scanf("%ld", FbConvertir);
EuroConvertit = FbEuro(FbConvertir);
printf("Cela fait: %i€ \n\n", EuroConvertit);

system("Pause");
return 0;
}



Merci de votre aide.

Bien à vous...
A voir également:

2 réponses

jeangilles Messages postés 816 Date d'inscription samedi 21 juin 2008 Statut Membre Dernière intervention 17 juillet 2012 186
14 avril 2009 à 15:39
Dans tes scanf, tu mets des "%ld", qui correspondent à des long int
or tu les mets dans des variables de type long double !
il faut mettre des "%lf" (si je ne m'abuse ...)
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844
14 avril 2009 à 15:45
il faut mettre des "%lf" (si je ne m'abuse ...)
Tu t'abuses ;-))).
Pour les long doubles, il faut mettre %Lf
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844
14 avril 2009 à 15:43
Salut,
Tout d'abord, pour les conversions les doubles sont largement suffisant. Pas besoin de long double.

Sinon long double n'est pas la même chose que long.
Donc lorsque tu fais : EuroConvertit = FbEuro(FbConvertir); le compilateur cherche à convertir le long double renvoyé par la fonction en long int (type d'EuroConvertit). Puisqu'il y a perte de précision, le cast n'est pas implicite. D'où l'avertissement. Il faut caster explicitement et tu n'auras plus l'avertissement.
Attention aussi à bien toujours mettre l'adresse de la variable dans tes scanf. Pour afficher un long double, il faut utiliser %Lf et non %i.

Mais, je te conseillerais de n'utiliser que des doubles partout.
double FbEuro(...) {
 ...
}

double EuroConvertir = 0;
double FbConvertit = 0;
double EuroConvertit = 0;
double FbConvertir = 0; 

scanf("%lf", &EuroConvertir); 

printf("Cela fait: %fFb \n\n", FbConvertit);


Et enfin, n'oublie pas de mettre les break dans ton switch ainsi que les accolades.
switch(..) {
   case 1:
       ...
       break;
   case 2: 
        ...
        break;
    default:
        ...
}


Cdlt
0