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 :

Output Inatendu -- Aidez moi a expliquer ce "phénomène"


Sujet :

C++

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 66
    Points : 26
    Points
    26
    Par défaut Output Inatendu -- Aidez moi a expliquer ce "phénomène"
    Bonjour,

    Voila j'ai écris ce qui me semblait être un projet quelquonque très facile.
    Mais en l'éxécutant, je tombe sur un output plutot bizzare, mais qui ne gène pas au fonctionnement de mon programme. Mais apr curiosité, j'aimerai savoir d'où vient cet output.

    Voila mon code ;

    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
    #include <iostream>
    #include <string>
    
    using namespace std;
    
    class Membre
    {
    private :
    float hours;
    public :
    void addtime(float timetoadd);
    float get_time();
    
    };
    void Membre::addtime(float timetoadd)
    {
        hours+=timetoadd;
    }
    float Membre::get_time()
    {
        return hours;
    }
    int main()
    {
    Membre gabriel;
    
    cout << gabriel.get_time();
    gabriel.addtime(500);
    cout << gabriel.get_time();
    system("PAUSE");
    return 0;
    }
    La ligne d'ou viens l'output bizzare est celle en orange.
    Je m'attendais a qu'il affiche 0, étant donné que je n'ai pas donné de valeur a hours mais il affiche a la place une série de caractere(nombres lettres) vraiment innatendues. Pourtant il doit prendre ca pour un 0 puisque lorsque j'appele la fonction addtime, il le compte comme si c'était un 0.


    Pouvez vous m'expliquer,

    Merci,

    ggcourtois

  2. #2
    Alp
    Alp est déconnecté
    Expert éminent sénior

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Points : 11 860
    Points
    11 860
    Par défaut
    Si crées un constructeur et que tu initialises à 0.0 hours dedans, ça donne quoi ?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    271
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Décembre 2006
    Messages : 271
    Points : 329
    Points
    329
    Par défaut
    Si tu compiles ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
     
    #include <string>
    #include <iostream>
     
     
    int main()
    {
      float hours;
     
      std::cout << hours << std::endl;
     
      return 0;
    }

    Resultat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    $ ./test
    -7.0042e-15
    $ ./test
    -6.89318e-15
    $ ./test
    -6.73185e-15
    $ ./test
    -7.08053e-15

    La valeur affectée à hours est "aléatoire" car elle n'a pas de valeur assignée par défaut.

  4. #4
    Membre éclairé Avatar de MatRem
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    750
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 750
    Points : 693
    Points
    693
    Par défaut
    C'est quoi l'affichage bizarre exactement (ou du moins quel style), on peut avoir un exemple?

  5. #5
    Alp
    Alp est déconnecté
    Expert éminent sénior

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Points : 11 860
    Points
    11 860
    Par défaut
    Ce sont des affichages comme dans le message de tamiel.
    Les nombres et les lettres ce sont des flottants écrit avec le "e".

    Donc si tu initialises à 0.0 dans un constructeur ta variable "hours", ton code sera bon

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 66
    Points : 26
    Points
    26
    Par défaut
    D'accord merci beaucoup, parceque je fesais du c# et si j'ai bonne mémoire, ceci est pris en charge en c#. Mais ce que je comprends pas c'est la raison pour laquelle il fait le bon caclul(hours=500) alors que la valeur par defaut est censé être aléatoire?

    Merci de m'expliquer,
    ggcourtois

  7. #7
    Alp
    Alp est déconnecté
    Expert éminent sénior

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Points : 11 860
    Points
    11 860
    Par défaut
    Je suppose que lorsque tu y accèdes pour le modifier, il lui affecte la valeur 0.0 avant de le modifier. Pourquoi, je ne sais pas.
    Ca doit être dans la norme ça.

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 66
    Points : 26
    Points
    26
    Par défaut
    Merci pour votre aide,

    ggcourtois

  9. #9
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Citation Envoyé par Alp
    Je suppose que lorsque tu y accèdes pour le modifier, il lui affecte la valeur 0.0 avant de le modifier. Pourquoi, je ne sais pas.
    Ca doit être dans la norme ça.
    Je pense que c'est plutôt parce que les valeurs de début sont, par hasard, extrêmement petites, donc insignifiante par rapport à 500 (un truc à 10^-15 comme ceux de tamiel n'apparaîtra pas dans un affichage à six chiffres significatifs)...

    Si par contre la valeur de début était extrêmement grande, c'est l'ajout de 500 qui ne serait pas visible...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  10. #10
    Alp
    Alp est déconnecté
    Expert éminent sénior

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Points : 11 860
    Points
    11 860
    Par défaut
    En effet ça me paraît être une meilleure explication

    Ca me semblait bizarre que ça soit initialisé à l'accès.

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

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