IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C++ Discussion :

[debutant][console] erreur C4244 et C2668


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de méphistopheles
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 551
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 551
    Par défaut [debutant][console] erreur C4244 et C2668
    Bonjour.

    j'ai cherché les erreurs dans la faq, mais je n'ais pas trouvé.

    j'ai le code suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    #include <math.h>//librairie fonctions math
    int numcoup_ordi(int num)
    {
    	int mynum=1;
    	int supose_num=50;
    	int min=0; 
    	int max=100;
    	while (supose_num!=num)
    	{
     
    		if (supose_num>num)
    		{
    			supose_num-=(supose_num-min)/2;
    			if (max>supose_num) max=supose_num;
    		}
    		else
    		{
    			supose_num+=(max-supose_num)/2;
    			if (min<supose_num) min=supose_num;
    		}
    		mynum++;
    	}
    	return mynum;
    }
     
    int main(int argc, char *argv[])
    {
    	srand(time(NULL));
    	long nbr=0;
    	nbr  = floor(rand()*100)+1;
    	printf("entrez un nombre entre 0 et 100\n\n");
    	int entered=100;
    	int numcoup=0;
    	while (entered!=nbr)
    	{
    		scanf("%d",&entered);
    		numcoup++;
    		if (entered>nbr)
    		{
    			printf("c'est moins\n");
    		}
    		else if (entered<nbr)
    		{
    			printf("c'est plus\n");
    		}
    		else
    		{
    			printf("trouve!\n");
    			system("PAUSE");
    			printf("tu a mis %d coups\n il m'en faudrais %d.", numcoup,numcoup_ordi(nbr));
    			system("PAUSE");
    		}
    	}
    	return 0;
    }
    Il marchais bien avant que j'ajoute la fonction numcoup_ordi, mais maintenant il m'affiche les erreurs suivantes que je n'ais pas réussi à regler, vu qu'il y en à trois qui concernent le module math.h:
    ------ Début de la génération : Projet : tutozero02, Configuration : Debug Win32 ------
    Compilation en cours...
    main.cpp
    d:\dossiers & prog\programation\c\c++\init\tutozero02\tutozero02\main.cpp(32) : warning C4244: 'argument' : conversion de 'time_t' en 'unsigned int', perte possible de données
    d:\dossiers & prog\programation\c\c++\init\tutozero02\tutozero02\main.cpp(34) : error C2668: 'floor' : appel ambigu à une fonction surchargée
    c:\program files\microsoft visual studio 8\vc\include\math.h(559): peut être 'long double floor(long double)'
    c:\program files\microsoft visual studio 8\vc\include\math.h(511): ou 'float floor(float)'
    c:\program files\microsoft visual studio 8\vc\include\math.h(137): ou 'double floor(double)'
    lors de la tentative de mise en correspondance de la liste des arguments '(int)'
    Le journal de génération a été enregistré à l'emplacement "file://d:\Dossiers & prog\programation\C\C++\init\tutozero02\tutozero02\Debug\BuildLog.htm"
    tutozero02 - 1 erreur(s), 1 avertissement(s)
    ========== Génération : 0 a réussi, 1 a échoué, 0 mis à jour, 0 a été ignoré ==========
    si vous aviez une idée de la manière pour régler ce problème ...

    merci.


    Ps: Questions subsidiaire: comment faire en sorte que le débogage ne lance pas l'executable (qu'il à alors généré la fois précédente) s'il ne l'a pas généré cette fois-ci à cause d'une erreur ?

    merci.

    Ps2: je suis sous visual C++ express

  2. #2
    Membre émérite

    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2005
    Messages
    634
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2005
    Messages : 634
    Par défaut
    Citation Envoyé par méphistopheles
    si vous aviez une idée de la manière pour régler ce problème
    Ton problème vient du fait que les paramètres de la fonction surchargée floor() sont float, double ou long double. Et toi tu passes à priori un nombre entier. Un simple cast résoudra le problème :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nbr = floor(static_cast<double>(rand() * 100)) + 1;
    Sinon tu as d'autres warning sur d'autres lignes, qui sont aussi des conversions à rendre explicites en principe.

    Ce code est plus du C que du C++...

  3. #3
    Membre Expert
    Avatar de méphistopheles
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 551
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 551
    Par défaut
    je ne comprend pas pourquoi je suis censé passer un nombre entier, puisque rand est, à ma conaissance, un double...

    si je passe un entien, il est inutile dans ce cas d'apeller le floor non ?

    sinon, srand ne prend en paramètre que des unsigned (cf premier warning...) ?


    merci

  4. #4
    Membre émérite

    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2005
    Messages
    634
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2005
    Messages : 634
    Par défaut
    Citation Envoyé par méphistopheles
    je ne comprend pas pourquoi je suis censé passer un nombre entier, puisque rand est, à ma conaissance, un double...
    Non tu es justement censé passé un flottant, mais rand() renvoie un entier. Donc il est inutile d'appeler floor() ici (j'ai même pas tilté )

    sinon, srand ne prend en paramètre que des unsigned (cf premier warning...) ?
    Oui

  5. #5
    Membre Expert
    Avatar de méphistopheles
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 551
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 551
    Par défaut
    là, je comprend encore moins: si le rand renvoyais un entier: le multiplier par 100 me donnerais ou 1 ou 0, mais jamais des nombres intermédiaires non... ?

  6. #6
    Membre Expert
    Avatar de méphistopheles
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 551
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 551
    Par défaut
    c'est curieux, maintenant, rand me renvoie un entier (énorme) alors que ce n'étais pas le cas...
    bon, pas grave, je me contente d'un modulo, mais je me demande s'il n'y as pas plus économique en ressources ... (pas pour ce programme bien sur )

  7. #7
    Invité de passage
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1
    Par défaut Pour t erreurs de compilation
    Montre-moi où est comment tu déclare ta fonction « floor »

  8. #8
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Citation Envoyé par 4u4m4us
    Montre-moi où est comment tu déclare ta fonction « floor »
    C'est une fonction standard de math.h. Mais bon le problème n'est plus là.

    j'ai vu, mais la faq ne traite que le caractère aléatoire ou non de la methode utilisée. j'aimerais savoir combien de ressources cela prend-il et à la limite, si conaître le maximum de random et faire une simple division ne permetrais-il pas de ne pas tenir compte des bits de poid faible ?
    Niveau ressources je ne pense pas que ça puisse poser problème, à moins d'une utilisation particulièrement intensive des nombres aléatoires. Pourquoi te poses-tu cette question ?

  9. #9
    Membre Expert
    Avatar de méphistopheles
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 551
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 551
    Par défaut
    c'est toujours bon à savoir

    sinon, sur quel intervale rand() génere-il ?

  10. #10
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    De 0 à RAND_MAX.

    Mais bon tout ça est dans la FAQ...

  11. #11
    Membre Expert
    Avatar de méphistopheles
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 551
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 551
    Par défaut
    heu... je ne trouve pas RAND_MAX dans la faq.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Debutant(e)] Erreur de compilation
    Par gandalf_le_blanc dans le forum Applets
    Réponses: 9
    Dernier message: 27/02/2007, 09h30
  2. [ debutant ][ Tomcat ] Erreurs fichier web.xml
    Par zsoh dans le forum Tomcat et TomEE
    Réponses: 3
    Dernier message: 13/04/2005, 11h35
  3. [Debutant] Lieur Erreur
    Par Tanahjampea dans le forum Débuter
    Réponses: 6
    Dernier message: 17/08/2004, 11h26
  4. [Débutant][Conception] Erreur avec une classe interne
    Par Devil Redneck dans le forum Général Java
    Réponses: 5
    Dernier message: 11/06/2004, 15h45
  5. [debutant][servlet]erreur causée par une listBox
    Par omega dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 05/03/2004, 10h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo