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 :

Pourquoi l'erreur suivante dans mon Programme d'Exercice en C++ ?


Sujet :

C++

  1. #1
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2013
    Messages
    452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2013
    Messages : 452
    Points : 66
    Points
    66
    Par défaut Pourquoi l'erreur suivante dans mon Programme d'Exercice en C++ ?
    Bonjour je débute en C++ et je ne comprends pas pourquoi cette erreur là quand j'essaies de compiler avec Code::Block. Voici le Code ci-dessous et Code::Block me signale qu'il y a une erreur au niveau du int resultat(nbreClasse + nbreEleve);:

    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
    #include <iostream>
     
    using namespace std;
     
    int main()
    {
    int nbreEleve(0), nbreClasse(0), resultat;
    cout << "Quelle est le Nombre d'Eleve dans votre ecole ?" << endl;
    cin >> nbreEleve;
    cout << "Quelle est le nombre de classe disponible ?" << endl;
    cin >> nbreClasse;
    int resultat(nbreClasse + nbreEleve);
    cout << "Quelle est la somme total des Eleves et des Classe dans l'Etablissement ?" << endl;
    cout << "La somme totale est: " << resultat << endl;
    return 0;
    }
    1 - Alors, j'aimerais savoir pourquoi donc cette erreur. Mon but est de faire la somme de NbreClasse et NbreEleve.

    2 - J'ai par la suite décidé d'effacer carrément toute la ligne int resultat(nbreClasse + nbreEleve); et surprise, Code::Block a accepté la compilation mais petite remarque, le resultat donne une valeur (4309870) que je ne comprends pas du tout. Pourquoi donc cette valeur ???
    Nom : 1.JPG
Affichages : 760
Taille : 118,7 Ko

    Merci de m'expliquer s'il vous plaît.

  2. #2
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 189
    Points : 17 141
    Points
    17 141
    Par défaut
    Primo: penses à utiliser la balise [ code ] (le bouton #)

    Cela s'appelle un "comportement indéfini" ou "undefined behaviour".
    Tout comportement indéfini permet au compilateur peut produire un programme qui fait ce qu'il veut parmi:
    • rien du tout
    • être télépathe, et produire le résultat que tu imagines etre le bon
    • faire quelque chose qui ressemble à ce que tu veux.
    • plante
    • faire n'importe quoi d'autre
    • effacer ton disque dur
    • faire sortir un démon de ton nez
    • ce qu'il veut d'autre

    En général, ca fini par être "n'importe quoi" ou "rien".

    En l'occurence, tu lis une variable non initialisée.
    La mémoire, elle, contient toujours des bits, positionnés forcément à 0 ou à 1. Donc, le programme peut toujours lire du "bruit ambiant".
    C'est précisément ce qu'il fait.

    Ajoutons que beaucoup de programme compilé en mode débug définissent une valeur arbitraire pour toutes les variables non initialisées.


    Précision:
    Les comportements indéfinis sont un intermédiaire entre "interdit par le langage" ("ill-formed program") et du code correct. Ils apparaissent quand les détecter n'est pas évident, voire carrément impossible (à la compilation).
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  3. #3
    Membre actif
    Homme Profil pro
    Analyste Programmeur
    Inscrit en
    Septembre 2008
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste Programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 176
    Points : 297
    Points
    297
    Par défaut
    Bonjour,

    Je suis loin d'être un pro en C++ mais quand même :
    - Pourquoi 4309870 ? Car tu déclare bien ta variable resultat mais tu ne l'initialise pas donc, quand tu cherche à savoir ce qu'il y dedans, il te renvois ce qu'il trouve à l'adresse mémoire qu'on lui a attribué.
    - nbreEleve(0) ? Tu l'as trouvé où cette syntaxe pour initialiser une variable ? Tu as vérifier que ça t'initialise bien nbreEleve à 0 ?
    Personnellement, je connais cette syntaxe mais derrière un constructeur, pas pour des variables locales (enfin j'ai jamais testé).
    Tu as essayé quelque chose de plus classique, genre resultat = nbreClasse + nbreEleve; ?

    Bonne continuation.
    L’aléatoire n’existe pas en informatique, c’est juste un moyen de dire que l’on a pas encore compris.

  4. #4
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2013
    Messages
    452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2013
    Messages : 452
    Points : 66
    Points
    66
    Par défaut
    Comment donc modifier ce code pour que resultat soit la somme des deux variable nbreEleve et nbreClasse ??? Où se trouve exactement l'erreur et quelle modification apportée ???

    Citation Envoyé par Kyroon Voir le message
    Tu as essayé quelque chose de plus classique, genre resultat = nbreClasse + nbreEleve; ?
    Bien sûr que si j'ai déjà essayé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    resultat = nbreClasse + nbreEleve;
    Et c'est pareil.

  5. #5
    Membre averti
    Homme Profil pro
    Cadre informatique
    Inscrit en
    Avril 2013
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Cadre informatique

    Informations forums :
    Inscription : Avril 2013
    Messages : 183
    Points : 435
    Points
    435
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    int nbreEleve(0), nbreClasse(0), resultat;
    ...
    int resultat(nbreClasse + nbreEleve);
    Tu as un oubli dans la derniere ligne

    Enleve le int et tout tourne parfaitement. Tu tentes en fait d'allouer 2 fois de la mémoire pour une variable du nom de resultat, d'ou le probleme.
    Bon courage pour la suite!

  6. #6
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2013
    Messages
    452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2013
    Messages : 452
    Points : 66
    Points
    66
    Par défaut
    Ok merci je vais essayé plus tard. Merci qu'en même.

  7. #7
    Membre averti
    Homme Profil pro
    Cadre informatique
    Inscrit en
    Avril 2013
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Cadre informatique

    Informations forums :
    Inscription : Avril 2013
    Messages : 183
    Points : 435
    Points
    435
    Par défaut
    Citation Envoyé par Kyroon Voir le message
    - nbreEleve(0) ? Tu l'as trouvé où cette syntaxe pour initialiser une variable ? Tu as vérifier que ça t'initialise bien nbreEleve à 0 ?
    Personnellement, je connais cette syntaxe mais derrière un constructeur, pas pour des variables locales (enfin j'ai jamais testé).
    Tu as essayé quelque chose de plus classique, genre resultat = nbreClasse + nbreEleve; ?
    En fait, il appelle le "constructeur de int" si je puis dire et c'est tout a fait valable en C++
    La version plus classique permet effectivement une meilleure visibilité mais le résultat est le meme.

    Comme dit, en doublon, sur l'autre post, enleve le int car tu demandes a créer 2 fois la meme variable.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int resultat(nbreClasse + nbreEleve);

  8. #8
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 965
    Points
    32 965
    Billets dans le blog
    4
    Par défaut
    Que dit le compilateur ?
    int resultat(nbreClasse + nbreEleve); est impossible ici parce que doit générer une erreur C2086 : "int resultat : redefinition"

    Bien sûr que si j'ai déjà essayé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    resultat = nbreClasse + nbreEleve;
    Et c'est pareil.
    Au nom des millions de programmeurs qui font des additions d'entiers tous les jours, ceci est la syntaxe correcte.
    Si tu as une erreur avec ça, ton erreur est ailleurs. Et il semblerait que ce que tu exécutes, voire compiles, est loin d'être ce que tu crois.

    Donc tu compiles, et exécutes, quoi au juste ?
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

Discussions similaires

  1. Message d'erreur récurrent dans mon programme
    Par diki38 dans le forum Langage
    Réponses: 4
    Dernier message: 20/12/2009, 12h23
  2. Réponses: 1
    Dernier message: 18/04/2008, 04h33
  3. bug dans mon programme (message d'erreur)
    Par maxmarie dans le forum Windows Mobile
    Réponses: 10
    Dernier message: 13/09/2007, 10h34
  4. [Help] Erreurs dans mon programme
    Par Tacha dans le forum Langage
    Réponses: 13
    Dernier message: 02/10/2006, 13h57
  5. [Lien]erreur dans mon programme python
    Par durnambule dans le forum Général Python
    Réponses: 11
    Dernier message: 29/01/2004, 14h59

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