Signaler

Problème de conversion sur visual studio

Posez votre question abyass 13Messages postés vendredi 30 juin 2017Date d'inscription 21 juillet 2017 Dernière intervention - Dernière réponse le 17 juil. 2017 à 08:53 par abyass
Bonjour,

J'ai besoin de vos aides SVP.

J'étais entrain de développer sur Code::Blocks et tout marche bien.
Mais je viens de changer l'IDE à Visual Studio et là des warnings inatendus apparaissent.
Voilà un morceau du code:

 
float f;
int i;
f=(int)i;

le warning est :
warning C4244: '=' : conversion de 'int' en 'float', perte possible de données



Je n'arrive pas à le résoudre.

Quelqu'un pourra m'aider SVP.

Merci :)



Afficher la suite 
Utile
+0
plus moins
Salut,
Bah en fait moi je me demande pourquoi Code Blocks ne te disais rien tu n'as peut être tout simplement pas fait attention.
Déjà tu fais plusieurs erreurs.
  • La première et la plus grave c'est que f est un float donc quand tu fais un cast en int, tu fais un trucs bizarre. C'est comme si tu disais, toi tu es une banane transforme toi en cerise. ça ne marche pas...


Tu peux faire ça :
float f;
int i;
i = (int)f;

ou
float f;
int i;
f = (float) i ;
  • Ta deuxième erreur c'est que tu n'as pas initialisé tes variables, donc en fait ce que tu fais a un comportement complètement étrange.


Maintenant si ce que tu veux faire c'est "tronquer", cad, admettons tu as un float égale à 25.355 et que tu veux le convertir en un float égale à 25.0 , il faut que tu fasse ça :

float f = 25.355;
int i = (int) f;
f = (float) i ;


ou encore de manière condensé :
float f = 25.355;
f = (float) ((int) f) ;


YCN-
[Dal] 4356Messages postés mercredi 15 septembre 2004Date d'inscription ContributeurStatut 13 juillet 2017 Dernière intervention - 13 juil. 2017 à 18:55
Salut YCN-,

Tu as raison sur le fait que les variables ne sont pas initialisées, cependant je ne suis pas sûr que le code posté par abyass soit complet.

Codeblocks n'est pas un compilateur, c'est un EDI qui peut fonctionner avec de nombreux types de compilateurs.

Il est habituellement utilisé avec gcc, cependant, et c'est probablement avec ce compilateur que abyass compilait son code.

Il est parfaitement légal, en C, de faire :
#include <stdio.h>

int main(void) {
    float f;
    int i = 12;

    f = (int) i;
    f = i;
    printf("i = %d - f = %f\n", i, f);

    return 0;
}

Les lignes 7 ou 8 sont complètement équivalentes, le cast étant inutile puisque i est déjà un int. Dans les deux cas, le contenu entier affecté à f sera implicitement convertit en float.

La compilation de ce code avec gcc et les options
gcc -Wall -Wextra -Wpedantic
ne produit aucun warning.

Selon le standard du C, le type float peut contenir largement ce qui tient dans un int (FLT_MAX vaut au moins 3.40282347E+38F, et INT_MAX +32767).

Par ailleurs, il n'y a pas de "pertes", de décimales dans ce sens (cela arriverait dans l'autre sens, si on affectait un float à un int, avec, en outre, un risque de débordement, non géré dans ton code d'exemple).

Je ne comprends pas l'avertissement de Visual Studio. En cherchant dans la doc de Microsoft, on dirait que le message est lié au compilateur C++.. peut-être abyass a-t-il créé un projet C++. Sous Visual Studio, pour compiler en C et non en C++, il faut que les sources soient nommées .c et non pas .cpp


Dal
Répondre
abyass 13Messages postés vendredi 30 juin 2017Date d'inscription 21 juillet 2017 Dernière intervention - 17 juil. 2017 à 08:53
Merci pour votre réponse.
En fait, sur Code::Blocks, je compile avec mingw. Et là sur Visual studio, j'ai nommé mes sources .c non .cpp et j'ai même changé l'option compilation sous : Compiler comme code C.

J'ai changé mes float en double et ça marche. J'ai plus ces warnings. Pour moi, ce que j'ai vu qu'il est préférable d'utiliser double au lieu de float .
Donc je ne sais pas si je suis dans le bon sens ou non ?
Répondre
Donnez votre avis

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes.

Le fait d'être membre vous permet d'avoir des options supplémentaires.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !