Partage
  • Partager sur Facebook
  • Partager sur Twitter

Éviter le plantage

Boucle infinie dans un menu

    29 décembre 2005 à 7:05:41

    Certains d'entre vous ont surement remarqué que lorsqu'on utilise la boucle do (...) while pour un menu et que l'utilisateur entrait par exemple une lettre ou un nombre décimal (bref une valeur non entière), le programme se comportait comme ceci...

    Veuillez entrer un nombre
    Veuillez entrer un nombre
    Veuillez entrer un nombre
    Veuillez entrer un nombre
    Veuillez entrer un nombre
    Veuillez entrer un nombre
    // (...)


    Pas très plaisant n'est-ce pas? Je n'ai malheureusement pas encore trouvé de moyen pour faire fonctionner normalement la boucle dans une telle situation MAIS j'ai trouvé une façon de «contrôler» un peu mieu la réaction du programme. Voici une fonction de menu que j'ai écrite moi-même (si, si je vous l'assure):

    void menu()
    {
    printf("Entrez un nombre (1 ou 2)\n");
    int nOption = 0;
    do {
            scanf("%ld", &nOption);
            switch (nOption)
            {
                    case 1:
                            // Instructions appropriées...
                            break;
                    case 2:
                            // D'autres instructions...
                            break;
                    default:
                            nOption++; // Cette instruction peut paraître étrange mais elle est essentielle
                            printf("Veuillez entrer un choix parmis ceux qui vous sont propos%cs\n", 130); // L'argument 130 indique que le %c doit être remplacé par un «é»
            }
    } while (nOption != 1 && nOption != 2);
    }


    Vous vous demandez surement «mais pourquoi diable a-t-il incrémenté le nombre entré par l'utilisateur?» (default du switch). Bonne question. En fait, c'est pour «calmer» le programme au cas où l'utilisateur écrit du texte ou lieu d'un nombre. Ainsi, le programme va simplement quitter la boucle et se fermer (presque) normalement au lieu de répéter la même ligne à l'infini.

    Voilà, ce n'est peut-être pas la meilleur méthode pour contrôler un bug de ce genre mais c'est déjà mieu que de le laisser faire une boucle infinie. Si quelqu'un à un code qui permet de contrôler également les valeurs décimales (car le mien contrôle seulement les lettres), qu'il le post ici, ca servira à plusieurs j'en suis sûr.
    • Partager sur Facebook
    • Partager sur Twitter
      29 décembre 2005 à 22:55:20

      Vraiment personne n'a d'idées pour améliorer mon code?
      • Partager sur Facebook
      • Partager sur Twitter
        29 décembre 2005 à 23:05:37

        tu peux tester en mettant après scanf("%ld", &nOption); :
        nOption=atof(nOption);
        • Partager sur Facebook
        • Partager sur Twitter

        Éviter le plantage

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown