2010-02-03 5 views
4

J'ai cherché autour et je n'arrive pas à trouver un moyen de représenter les touches fléchées ou la clé d'échappement en tant que caractère unique en C++. Est-ce seulement possible? Je m'attendrais à ce qu'il soit similaire à \ t ou \ n pour tabulation et nouvelle ligne respectivement. Chaque fois que je recherche des caractères échappés, il n'y a jamais qu'une liste de cinq ou six personnages bien connus.Est-ce que toutes les clés peuvent être représentées comme un seul caractère en C++?

+0

Cherchez-vous un moyen de simuler l'utilisateur en appuyant sur l'une des touches fléchées? –

+0

En bref, non. Les touches fléchées ne sont pas des caractères et ne correspondent pas aux caractères. Vous devez les traiter soit au niveau des codes clés, soit au niveau des séquences d'échappement terminales. – hobbs

Répondre

11

La réponse courte est non. La réponse longue est qu'il existe un certain nombre de caractères de contrôle dans le jeu de caractères ANSI standard (de la virgule 1 à la virgule 31, inclusivement), parmi lesquels figurent les codes de contrôle de saut de ligne, de retour chariot et de fin de fichier , etc. Quelques-uns sont généralement interprétés comme des flèches et la clé d'échappement, mais seulement pour la compatibilité avec les terminaux.

Les claviers PC standard envoient un code de contrôle de 2 ou 3 octets qui représente la touche qui a été enfoncée, l'état dans lequel elle se trouve, la touche control/alt/shift enfoncée et quelques autres éléments. Vous aurez envie de rechercher des "codes clés" pour voir comment les gérer. Les gérer diffère entre les systèmes d'exploitation et les bibliothèques de base que vous utilisez, et leur signification diffère en fonction de la configuration du clavier du système d'exploitation (qui peut inclure des caractères introuvables dans le jeu de caractères ANSI).

+0

Bonne réponse. +1 – batbrat

0

Les variables char représentent généralement des éléments de la table ASCII.
http://www.asciitable.com/
il y a aussi man ascii sur unix. Si vous voulez des touches fléchées, vous aurez besoin d'un moyen plus direct d'accéder à la saisie au clavier. les touches fléchées sont traduites en séquences de caractères avant de frapper stdio. Si oyu veut un accès direct au clavier, considérez une bibliothèque GUI, sdl, une entrée directe pour n'en nommer que quelques-uns.

1

Pas possible; les claviers construits pour certaines langues ont des caractères qui ne peuvent pas être représentés dans un char, et de toute façon, comment représentez-vous control-option-command-shift-F11 dans un char?

Les claviers envoient des codes d'espacement, qui sont soit une sorte d'événement dans un système GUI, soit une courte chaîne d'octets représentant la clé. Quels codes dépendent de votre système, mais sur la plupart des systèmes de type terminal, ncurses sait comment les gérer.

0

Il n'y a aucun caractère d'échappement pour les touches fléchées. Ils sont représentés comme Keycodes, afaik. Je suggère d'utiliser une bibliothèque d'entrée de niveau supérieur pour détecter les pressions sur les touches. Si vous voulez le faire à partir de zéro, l'approche adoptée peut varier en fonction de la plate-forme spécifique pour laquelle vous programmez.

Dans tous les cas, à l'époque de TURBO C, j'ai utilisé -

//Wait for keypress 
//store input in ch 
//see if the ASCII code matches the code for one of the arrow keys 
Questions connexes