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 :

Je ne trouve pas l'erreur dans mon code


Sujet :

C++

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2009
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Je ne trouve pas l'erreur dans mon code
    bonjour à tous,

    voila j'ai un problème que je ne peux réglé tout seul, voici le 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
    int verification (int panier_2[],int& nombre_entre)
    {
        bool disponibilite = false;
        while (disponibilite != true)
        {
              cin >> nombre_entre;
              int i = 0;
              for (i = 0; i < 6; i++)
              {
                  if (panier_2[i] == nombre_entre)
                  {
                                  disponibilite = true;
                  }
              }
              if (disponibilite != true)
              {
                  cout << "veuillez inscrire un nombre disponible" << endl;
              }
        }
    }
    int operation (int panier_2[])
    {
        int operateur, nombre_entre,;
        cout << "votre première plaque?" << endl;
        verification (panier_2, nombre_entre);
        cout << "votre opérateur?" << endl;
        cin >> operateur;
        cout << "votre deuxième plaque?" << endl;
        verification (panier_2, nombre_entre);
    }
    Donc le problème est que lorsque j'appelle pour la 2ème fois la fonction "verification" dans "operation", la console, lors de l'éxécution ne fait rien. C-a-d que "votre deuxieme plaque?" s'affiche a l'écran et puis plus rien.

    Je ne comprend pas et si quelqu'un pouvait m'aider ce serait tres gentil, merci d'avance

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 13
    Points : 11
    Points
    11
    Par défaut
    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
    int verification (int panier_2[],int& nombre_entre)
    {
      bool disponibilite = false;
      while (disponibilite != true)
      {
        cin >> nombre_entre;
        int i = 0;
        for (i = 0; i < 6; i++)
        {
          if (panier_2[i] == nombre_entre)
          {
            disponibilite = true;
          }
        }
        if (disponibilite != true)
        {
          cout << "veuillez inscrire un nombre disponible" << endl;
        }
      }
    }
     
     
    int operation (int panier_2[])
    {
      int operateur, nombre_entre,;
      cout << "votre première plaque?" << endl;
      verification (panier_2, nombre_entre);
      cout << "votre opérateur?" << endl;
      cin >> operateur;
      cout << "votre deuxième plaque?" << endl;
      verification (panier_2, nombre_entre);
    }
    Déjà, un peu d'indentation ne fait jamais de mal :-P
    - cin >> operateur; à quoi sert ce cin? je ne vois nulle part l'utilisation d'operateur
    - Sans compilateur sous la main en ce moment, je ne m'avancerais pas sur l'exécution exacte(et puis ca fait longtemps le C++), mais quand tu dis, que ça ne fait rien au deuxième appel, c'est que la fonction se termine? car le code serait censé te demander de saisir nombre_entre(à moins qu'un Enter soit déjà dans le buffer? hmm)
    - Autre bizarrerie: tes deux fonctions sont supposées retourner des valeurs, un int dans les deux cas, mais je ne vois aucun return (ça compile en C++?)


    - Remarque générale: ton code est découpé de façon étrange, pour ne pas dire incorrecte, des cin dans les deux fonctions, un appel par référence qui n'a pas lieu d'être je crois si tu retournais la bonne valeur, tu as du violer une bonne vingtaines de "régles" de programmation :-P, bon j'exagère quelque peu. En général, suffit qu'une partie du code s'occupe de l'affichage et des demande de saisie par l'utilisateur, et simplement envoie les données se faire traiter par la fonction adéquate qui retourne le résultat.

    Je n'ai malheureusement pas le temps d'élaborer la tout de suite, mais dis toujours ce que tu veux faire effectuer par ces deux fonctions, on pourra les découper un peu plus correctement.

    Conseil: quand tu rédiges un message dans le forum, il y a le bouton # qui rajoute des balises <CODE > pour entourer ton code

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2009
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    ca compile sans erreurs.

    maintenant, ça rentre dans une boucle infinie quand j arrive au 2ème appel de la fonction "verification" dans "operation". Il rentre dans une boucle infinie en inscriavant (a l infini) "veuillez inscrire un nombre disponible". Or quand j'appelle la fonction "verification" la 1ère fois, tout va bien.

    Aussi, pas de return car je fais un passage par référence grâce au "&" a coté de la variable que je veux retourné.

    et j'ai rajouté quelques lignes pour que vous voyez a quoi sert operateur:

    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
    int verification (int panier_2[],int& nombre_entre)
    {
        bool disponibilite = false;
        while (disponibilite != true)
        {
              int i =0;
              cin >> nombre_entre;
              for (i; i < 6; i++)
              {
                  if (panier_2[i] == nombre_entre)
                  {
                                  disponibilite = true;
                  }
              }
              if (disponibilite != true)
              {
                  cout << "veuillez inscrire un nombre disponible" << endl;
              }
        }
    }
    int operation (int panier_2[])
    {
        int operateur, nombre_entre_1, nombre_entre_2, nombre_final;
        cout << "votre première plaque?" << endl;
        verification (panier_2, nombre_entre_1);
        cout << "votre opérateur?" << endl;
        cin >> operateur;
        cout << "votre deuxième plaque?" << endl;
        verification (panier_2, nombre_entre_2);
        if (operateur = '+')
        {
             nombre_final = nombre_entre_1 + nombre_entre_2;
        }
     
    }

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 13
    Points : 11
    Points
    11
    Par défaut
    Dans ta fonction operation, essaie donc ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    char operateur;
    int nombre_entre_1, nombre_entre_2, nombre_final;
    Et finie la boucle infinie. (testé: me suis réinstallé un vieux compilateur)
    Je suppose que s'attendant un lire un int, et que tu lui rentres un +, donc un caractère, la gestion du buffer se pète la gueule, et le prochain cin qui arrive, on lui injecte directement la valeur qui était resté dans le buffer(au moins une partie la représentation binaire de celle la )....je fais de l'hypothèse , faudrait quelqu'un qui connaisse le cin, le buffer et toussa pour expliquer ce qui se passe réellement dans le détail....et je crois me souvenir qu'il y avait une façon de vider le buffer en c++...resterait à chercher.
    J'ai fait ce test pour m'en convaincre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    void tester() {
    	int a;
    	cin >> a;      // ici , si je saisis un caractère, + par exemple
    	int b= 0;
    	cin >> b ;       // je ne m'arrête jamais à cette ligne
    	int c = 1;
    }


    Aussi, pas de return car je fais un passage par référence grâce au "&" a coté de la variable que je veux retourné.
    Disons que je préfére éviter les fonctions avec effets de bord autant se peut, et ce cas ci est trop simple pour avoir des passages par références, mais bon, là je diverge, et on sait que c'est énorme -ref inside-

  5. #5
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2009
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Oui c'est vrai que c'est un cas simple et qu'un return fonctionnerait tout aussi bien. Et un grand merci pour la réponse, c'était bien ça. Merci d'avoir pris le temps de corriger le problème j'aurais pas trouvé, c'est encore trop subtile pour moi ce genre d'erreurs^^. Bonne journée

Discussions similaires

  1. [Débutant] Il n'y a pas d'erreurs dans mon code !
    Par Garamante dans le forum C#
    Réponses: 3
    Dernier message: 09/01/2013, 23h14
  2. je ne trouve pas l'erreur dans mon programme
    Par Briska dans le forum Débuter
    Réponses: 19
    Dernier message: 04/04/2008, 09h21
  3. Je trouve pas les .class dans mon dossier classes
    Par amine84 dans le forum Eclipse Java
    Réponses: 4
    Dernier message: 15/12/2007, 14h26
  4. Réponses: 4
    Dernier message: 10/08/2006, 13h44
  5. Réponses: 5
    Dernier message: 14/05/2006, 22h41

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