Touches directionnelles
hoff
-
fiddy Messages postés 11653 Date d'inscription Statut Contributeur Dernière intervention -
fiddy Messages postés 11653 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
j'ai programme dans lequel je peux deplacer un pion sur un plateau, pour l'instant j'utilise "getchar" et des lettres qui corresponde au touche directionnelles (les touches directionnelles du clavier me renvoyant avec "getchar" toujours le meme "char")
je suppose qu'il doit y avoir une maniere plus efficace ou au moins plus portable non ?
j'ai programme dans lequel je peux deplacer un pion sur un plateau, pour l'instant j'utilise "getchar" et des lettres qui corresponde au touche directionnelles (les touches directionnelles du clavier me renvoyant avec "getchar" toujours le meme "char")
je suppose qu'il doit y avoir une maniere plus efficace ou au moins plus portable non ?
3 réponses
Si tu parles de langage C, je ne sais pas comment tu fais mais chez moi getchar() est insensible aux pressions des touches directionnelles. Parcontre getch() oui.
Les touches directionnelles sont sur 2 octets (contrairement aux lettres ou aux chiffres).
Tu peux découvrir leur valeur avec un petit programme de ce genre :
Les touches directionnelles sont sur 2 octets (contrairement aux lettres ou aux chiffres).
Tu peux découvrir leur valeur avec un petit programme de ce genre :
#include <stdio.h>
int main() {
int c;
c = getch();
printf("%d\n", c);
c = getch();
printf("%d\n", c);
return 0;
}
c'est en c++
au fait je me suis tromper j'utilise aussi "getch()" mais avec "#include <conio.h>" et il me semble que c'est pas portable
et quand j'utilise les touches directionnelles du clavier je reccupere 2 char (dont le premier est tjs identique) je vois pas trop comment faire
au fait je me suis tromper j'utilise aussi "getch()" mais avec "#include <conio.h>" et il me semble que c'est pas portable
et quand j'utilise les touches directionnelles du clavier je reccupere 2 char (dont le premier est tjs identique) je vois pas trop comment faire
Salut,
Effectivement, getch, ce n'est pas du tout portable.
Sinon tu peux t'en sortir avec getchar(), mais cela dépend de ton OS.
Sur le mien (Debian), c'est codé par défaut sur trois octets.
Flèche droite : 27 91 67
Flèche gauche : 27 91 68 etc.
Donc dans ce cas, si getchar() te retourne 27, il faudra relancer une autre fois le getchar() sur stdin pour avoir le 91 et une dernière pour récupérer finalement ce qui t'intéresse. Fais donc une fonction. Ca sera plus facile d'emploi.
Si tu fais en C++, c'est pareil, en remplaçant getchar par std::cin.
Si tu ne connais pas le code des touches qui dépend de ton OS, tu fais un programme qui affiche le code ascii de la touche pressée et tu les trouveras.
Mais dans ce cas, l'utilisation de la bibliothèque du système (conio.h pour windows) est plus appropriée. Dans ton programme, tu pourras faire un #if pour inclure la bonne bibliothèque en fonction de l'OS.
Cdlt
Effectivement, getch, ce n'est pas du tout portable.
Sinon tu peux t'en sortir avec getchar(), mais cela dépend de ton OS.
Sur le mien (Debian), c'est codé par défaut sur trois octets.
Flèche droite : 27 91 67
Flèche gauche : 27 91 68 etc.
Donc dans ce cas, si getchar() te retourne 27, il faudra relancer une autre fois le getchar() sur stdin pour avoir le 91 et une dernière pour récupérer finalement ce qui t'intéresse. Fais donc une fonction. Ca sera plus facile d'emploi.
Si tu fais en C++, c'est pareil, en remplaçant getchar par std::cin.
Si tu ne connais pas le code des touches qui dépend de ton OS, tu fais un programme qui affiche le code ascii de la touche pressée et tu les trouveras.
Mais dans ce cas, l'utilisation de la bibliothèque du système (conio.h pour windows) est plus appropriée. Dans ton programme, tu pourras faire un #if pour inclure la bonne bibliothèque en fonction de l'OS.
Cdlt
merci
mais en fait le probleme c'est que j'ai voulu utiliser le getch() pour eviter d'avoir a appuyer sur entrer a chaque fois
je suppose qu'il doit bien y avoir une maniere de le faire avec le cin n'est ce pas ???
mais en fait le probleme c'est que j'ai voulu utiliser le getch() pour eviter d'avoir a appuyer sur entrer a chaque fois
je suppose qu'il doit bien y avoir une maniere de le faire avec le cin n'est ce pas ???