Partage
  • Partager sur Facebook
  • Partager sur Twitter

_getche()

Sujet résolu
Anonyme
    8 octobre 2020 à 17:20:43

    Salut,

    En fait, je ne comprend pas très bien le fonction _getche(). Je veux utiliser la commande getche() pour demander une valeur a l'utilisateur sans qu'il est besoin d'utiliser la touche enter. Mes lorsque je remplace mon cin par getche() cela me marque une erreure.

    Merci

    • Partager sur Facebook
    • Partager sur Twitter
      8 octobre 2020 à 18:02:21

      Bonsoir, quelle est cette erreur ?

      Il me semble que _getche est une fonction C. Pour l'utiliser tu dois inclure conio.h

      #include <conio.h>
      
      int main(){
         
         int c {};
         c = _getche();
      }



      • Partager sur Facebook
      • Partager sur Twitter
      Anonyme
        8 octobre 2020 à 18:07:57

        Lorsque l'utilisateur entre un caractère il n'y a pas de problème, mais lorsqu'il doit entrer un chiffre plus rien fonctionne.

        • Partager sur Facebook
        • Partager sur Twitter
          8 octobre 2020 à 18:10:19

          C'est à dire ? Soit un peu plus précis !
          • Partager sur Facebook
          • Partager sur Twitter
            8 octobre 2020 à 18:19:38

            Salut,

            Non seulement, getche (ou _getche) est une fonction C, mais, en plus, elle le fichier d'en-tête qui la déclare (conio.h) n'est pas un fichier C standard.

            Il a été fourni à l'origine par le compilateur Borland, et a été par la suite intégré au compilateur de chez Microsoft.

            Au final, le mieux est sans doute de se passer de cette possibilité, d'autant plus que la seule utilisation pour laquelle getche() pourrait être intéressante est celle qui permette d'attendre que l'utilisateur enfonce une touche avant de continuer (faire une pose, en gros) , par exemple à l'aide d'un code qui serait proche de

            /* ceci est du C, pas du C++ */
            void pause(){
                printf("Appuyez sur une touche pour continuer";
                getche():
            }

            Or, le principe de forcer le programme à faire une pause est très largement discutable en lui-même... et, si c'est effectivement pour pouvoir faire une pause, un code C++ "pur" pour y arriver serait plutôt proche de

            /* ceci est du C++ "pur
             * nécessite l'inclusion de <iostream> (pour std::cout) et de
             * <limits> (pour std::numeric_limits )
             */
            void pause(){
                std::cout << "Appuyez sur entrée pour continuer..."; 
                std::cin.ignore( std::numeric_limits<std::streamsize>::max(), '\n' ); 
            }




            • Partager sur Facebook
            • Partager sur Twitter
            Ce qui se conçoit bien s'énonce clairement. Et les mots pour le dire viennent aisément.Mon nouveau livre : Coder efficacement - Bonnes pratiques et erreurs  à éviter (en C++)Avant de faire ce que tu ne pourras défaire, penses à tout ce que tu ne pourras plus faire une fois que tu l'auras fait
            Anonyme
              8 octobre 2020 à 18:22:46

              koala01 a écrit:

              Salut,

              Non seulement, getche (ou _getche) est une fonction C, mais, en plus, elle le fichier d'en-tête qui la déclare (conio.h) n'est pas un fichier C standard.

              Il a été fourni à l'origine par le compilateur Borland, et a été par la suite intégré au compilateur de chez Microsoft.

              Au final, le mieux est sans doute de se passer de cette possibilité, d'autant plus que la seule utilisation pour laquelle getche() pourrait être intéressante est celle qui permette d'attendre que l'utilisateur enfonce une touche avant de continuer (faire une pose, en gros) , par exemple à l'aide d'un code qui serait proche de

              /* ceci est du C, pas du C++ */
              void pause(){
                  printf("Appuyez sur une touche pour continuer";
                  getche():
              }

              Or, le principe de forcer le programme à faire une pause est très largement discutable en lui-même... et, si c'est effectivement pour pouvoir faire une pause, un code C++ "pur" pour y arriver serait plutôt proche de

              /* ceci est du C++ "pur
               * nécessite l'inclusion de <iostream> (pour std::cout) et de
               * <limits> (pour std::numeric_limits )
               */
              void pause(){
                  std::cout << "Appuyez sur entrée pour continuer..."; 
                  std::cin.ignore( std::numeric_limits<std::streamsize>::max(), '\n' ); 
              }


              Je suis amplement d'accord avec vous, cependant je dois absolument utiliser cette fonction dans un de mes exercices.



              • Partager sur Facebook
              • Partager sur Twitter
                9 octobre 2020 à 14:49:27

                Les fonction getc() ou getchar() ont un comportement qui se rapprochent de ce que tu désires.

                A voir si ca te convient réellement.

                -
                Edité par Deedolith 9 octobre 2020 à 14:55:36

                • Partager sur Facebook
                • Partager sur Twitter
                  9 octobre 2020 à 15:10:47

                  AmirProg et Rouloude ont très bien résumé la situation. C'est quoi le problème exactement? (i.e. la réponse se décompose en 4 parties si tu veux que l'on ait une chance de comprendre ton problème et donc de t'aider: code, scénario/chose faite, résultat obtenu, résultat attendu)

                  Ensuite il faut savoir qu'il n'existe rien dans les standards du C ni du C++ qui permette de se mettre en attente de la prochaine touche tapée. Ces langages ont à la place des fonctions qui permettent de se mettre en attente du prochain retour charriot (i.e. la touche entrée), et consulter ce qui a été saisi avant. Pour faire une pause, Koala a très bien résumé la situation.

                  Le simple fait que _getchmachin ne soit pas portable et limitée à 1 ou 2 compilateur dont un que plus personne n'utilise depuis 20ans n'aidera pas à trouver de l'aide à son sujet, ici nous faisons plutôt dans l'industriel et le portable en général. Ce qui fait que l'on va utiliser d'autres bibliothèques.

                  Maintenant quel est l'objectif de ton exercice (chose que la formulation semble laisser sous-entendre) ?
                  Lire une touche au clavier et réagit aussitôt ?
                  Est-ce vraiment ça qui est imposé (les profs insistent parfois sur des choses aberrantes) ?

                  Bref, Je t'invite à répondre à chacune des 4 questions que je soulève. Les discussions pourront alors cesser de tourner en rond et avoir une chances d'aboutir à une solution à ton problème.

                  -
                  Edité par lmghs 9 octobre 2020 à 16:32:15

                  • Partager sur Facebook
                  • Partager sur Twitter
                  C++: Blog|FAQ C++ dvpz|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS| Bons livres sur le C++| PS: Je ne réponds pas aux questions techniques par MP.

                  _getche()

                  × 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