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 :

erreur d'incrémentation et de répétition


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    10
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : Algérie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 10
    Par défaut erreur d'incrémentation et de répétition
    Boncoir,
    Je suis un débutant en langage C++, et j'ai quelques lacunes au niveau de la programmation.
    Je veux écrire un algorithme qui peut deviner un nombre entier entre 0 et 1000, en adoptant la méthode de dichotomie.
    Voilà l’algorithme :
    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
    #include<stdio.h>
    #include<conio.h>
    int main(void)
    {
    int a=0, b=1000, n=500, i=1;
    char c;
    printf(" Reponds par p si le nombre a deviner est encore plus petit, par g s'il est plus grand et par t si l'algorithme l'a trouve \n" ) ;
    printf("Le nombre a deviner vaut 500");
    scanf("%c",&c) ;
    while(c!='t')
    {
    switch(c){
              case'p':
                  b=n;
                  break;
              case'g':
                      a=n;
                      break;
              default:
                              printf(" Reponds par p si le nombre a deviner est encore plus petit, par g s'il est plus grand et par t si l'algorithme l'a trouve \n" ) ;
                              break;
                              }
                        n=(a+b)/2;
    printf("Le nombre a deviner vaut %d",n);
    i++;
    scanf("%c",&c) ;
    }
    if (i==1) printf(" j'ai pu trouve ce nombre qui est egale a %d, des le premier essai ",n) ;
    else printf(" ,j'ai pu le trouver apres %d essais ",i) ;
    getch() ;
    }
    Mais lors de l’exécution, il y en a des erreurs.
    - à chaque essai, le i s’incrémente deux fois.
    - Le message qui doit être affiché quand l’utilisateur tape un caractère différant de ‘p’ et de ‘g’, apparaît à chaque fois.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Reponds par p si le nombre a deviner est encore plus petit, par g s'il est plus
     grand et par t si l'algorithme l'a trouve
    Le nombre a deviner vaut 500p
    Le nombre a deviner vaut 250 Reponds par p si le nombre a deviner est encore plu
    s petit, par g s'il est plus grand et par t si l'algorithme l'a trouve
    Le nombre a deviner vaut 250g
    Le nombre a deviner vaut 375 Reponds par p si le nombre a deviner est encore plu
    s petit, par g s'il est plus grand et par t si l'algorithme l'a trouve
    Le nombre a deviner vaut 375t
     ,j'ai pu le trouver apres 5 essais
    J’ai besoin de votre aide svp.

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 147
    Par défaut
    Le problème vient de la fonction scanf qui va aussi prendre en compte la frappe sur la touche entrée et donc tu vas avoir un 0x0A en plus de ton caractère.
    Le mieux est d'utiliser la fonction _getch qui capture la frappe sans echo.

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Citation Envoyé par coincoin73 Voir le message
    Le mieux est d'utiliser la fonction _getch qui capture la frappe sans echo.
    non-standard. voir fpurge() et fclean() sur le forum.
    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.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 147
    Par défaut
    En quoi c'est pas standard ?
    Il me semble que c'est inclus dans conio.h, non ?

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Cela implique que tu supposes que conio.h est standard...
    Tu supposes mal.
    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.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 147
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    Cela implique que tu supposes que conio.h est standard...
    Tu supposes mal.
    OK.

Discussions similaires

  1. Incrémentation d'un élément de structure : erreur de segmentation
    Par BOByTOX dans le forum GTK+ avec C & C++
    Réponses: 3
    Dernier message: 27/04/2011, 18h37
  2. erreurs http 500 à répétition
    Par doclaude dans le forum Tomcat et TomEE
    Réponses: 20
    Dernier message: 02/05/2010, 15h05
  3. Réponses: 10
    Dernier message: 31/12/2009, 11h35
  4. Erreur 1060 régulière pour un auto-incrément dévalué
    Par sergeh dans le forum Administration
    Réponses: 0
    Dernier message: 06/07/2009, 16h13
  5. Auto-incrémentation : erreur 1075
    Par valou7518 dans le forum Débuter
    Réponses: 8
    Dernier message: 27/12/2006, 13h44

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