C++ Détecter quand l'utilisateur appuie sur la touche flèche
J'ai eu un problème avec la détection de la touche flèche presses dans mon application console C++. J'ai essayé tout ce que j'ai trouvé, à la fois ici et sur d'autres tutoriel sites, mais tous de me donner la même chose à chaque fois que j'appuie sur la flèche:
Process returned 0 <0x0> execution time : 2.249 s
Press any key to continue.
Voici toutes les méthodes de détection de la pression sur la touche que j'ai essayé, tout en terminant de la même façon. Ce sont les deux seules à gauche dans mon code, les autres j'ai essayé j'ai supprimé au lieu de commenter.
Méthode:
c1 = getch();
if(c1 == 0)
{
c2 = getch();
if(c2 == 72) {cout << endl << "Up Arrow" << endl;}
else if(c2 == 80) {cout << endl << "Down Arrow" << endl;}
else{cout << endl << "Incorrect Input" << endl;}
}
Méthode deux:
switch(getch()) {
case 65:
cout << endl << "Up" << endl;//key up
break;
case 66:
cout << endl << "Down" << endl; //key down
break;
case 67:
cout << endl << "Right" << endl; //key right
break;
case 68:
cout << endl << "Left" << endl; //key left
break;
}
Est-il une erreur dans mon code qui m'a fait revenir à ma méthode principale, ou avait-il sauter par-dessus un peu de code? Est-il un moyen plus rapide de faire cela? Je suis presque sûr à 100% que mon code n'a rien à voir avec ce problème, parce que j'ai isolé le code de l'être dépend d'aucun autre aspect du programme, et j'ai continué à avoir le même problème.
Encore une fois, j'ai essayé toutes les méthodes d'obtention de la touche de direction que j'ai pu trouver, et je reçois le même problème. Si c'est important, je suis sur un Windows 8 Samsung ATIV Smart PC et en utilisant le dock clavier.
Merci d'avance pour toute aide.
C'est un avantage de
getch
. ReadConsoleInput
serait plus convenable alternatif, cependant.où pourrais-je trouver un bon exemple de cela?
Que diriez - ce one?
la réponse est potentiellement dans ce les questions réponses les plus fréquentes
OriginalL'auteur SplatFace Development | 2014-07-12
Vous devez vous connecter pour publier un commentaire.
de sortie comme ceci:
détecté une touche de direction!
Fonctionne très bien! Merci!
Visual Studio 2013 me dit d'utiliser _getch() getch() est obsolète. "Avertissement C4996: 'getch': POSIX nom pour cet élément est déprécié. Au lieu de cela, utiliser la norme ISO C++ conforme nom: _getch."
Qu'en des endroits différents? Est-ce aussi travailler pour un clavier avec les Chinois de mise en page?
arbboter réponse vous met sur la bonne voie, mais ne parvient pas à prendre en compte le code d'analyse pour les touches fléchées renvoie en fait à deux valeurs. Vous pouvez voir ma réponse ou de l'une de ces trois réponses pour plus d'informations: stackoverflow.com/a/10473315/130614, stackoverflow.com/a/2877857/130614, stackoverflow.com/a/16510089/130614
OriginalL'auteur arbboter
Voici une autre façon de le faire sans getch() à l'aide de événements (bien commenté et j'ai essayé de le rendre aussi simple que je le pouvais)
(Grâce à un intervenant, je sais maintenant que ce code n'est pas standard, mais il ne fonctionnera que si vous compilez avec
g++
, plus d'infos dans les commentaires)INPUT_RECORD eventBuffer[Events];
parce queEvents
est non-const. Mais vous pouvez lire les événements un par un.Je ne savais pas
Events
devait êtreconst
. J'ai juste compilé (avecg++
) et exécuter comme je l'ai prévu... Par tous les moyens, si c'est cassé le code, je vais essayer de le réparer ou (plus probablement) vient de supprimer la réponse, mais avant je fais, je voudrais savoir comment exactement ce code est censé échouer si je peux essayer de voir par moi-même.tableaux dynamiques est une extension de g++, pas de c++standard
Ah je vois, merci pour l'information, je pense que je vais faire un edit.
OriginalL'auteur James
Vérifier http://msdn.microsoft.com/en-us/library/windows/desktop/ms684961(v=vs. 85).aspx et http://msdn.microsoft.com/en-us/library/windows/desktop/dd375731(v=vs. 85).aspx
Process returned to 0
. Quel est l'arrêt de droit deReturn 0;
dans cet exemple?OriginalL'auteur user93353
OriginalL'auteur Putra Kusaeri
La réponse précédente par arbboter est proche, mais néglige le fait que les touches fléchées (et d'autres touches spéciales) de retour d'un scan code à deux caractères. La première est (0) ou (224) indiquant la clé est une grande étendue; le second contient le code d'analyse de la valeur.
Sans tenir compte de cela, les valeurs ASCII pour "H", "K", "M" et "P" sont interprétés à tort comme "Haut", "Bas", "Gauche" et "Droite".
Voici une version modifiée de arbboter du code de démontrer la lecture de la valeur étendue lorsque l'une des touches de direction est pressé:
OriginalL'auteur Erik Anderson