Code ASCII touche directionelles C

Résolu
didy_gwatinik Messages postés 352 Date d'inscription   Statut Membre Dernière intervention   -  
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,
Je suis en train de faire un programme en C, sous console et j'aimerai utiliser mes touches directionnelles, est-ce possible? Comment trouver le code de mes touches? J'ai vu sur différentes discussions qu'on parlait de système... mais je ne comprends pas très bien.
A voir également:

13 réponses

sway-yazen Messages postés 128 Date d'inscription   Statut Membre Dernière intervention   54
 
Bonjour,
chaque touche de clavier est reconnue par son code ascci, alors tu peux identifier la touche par le test sur le code ascci , voilà un programme en C qui affiche le code ascci de la touche entré :

#include<stdio.h>
int main (void)
{ char c;

do{
printf("presser une touche de clavier");
scanf("%c",&c);
printf("Le code ascci de %c est %d",c,c);
}while(c!=0); // le programme se termine en tapant 0

getch();
return 0;
}
5
didy_gwatinik Messages postés 352 Date d'inscription   Statut Membre Dernière intervention   80
 
Ca ne marche pas pour les touches directionnelles, chez toi si?
0
mype Messages postés 2435 Date d'inscription   Statut Membre Dernière intervention   437
 
sur windows leur codes ascii c'est 224 suivis de quelque chose
gauche: 224 75
haut: 224 72
droite: 224 77
bas: 224 80
3
didy_gwatinik Messages postés 352 Date d'inscription   Statut Membre Dernière intervention   80
 
ah merci beaucoup, maintenant juste une petite question comment utiliser le code ascii en C par exemple , je veux savoir quand l'utilisateur utilise les touches haut ou bas pour sélectionner un choix dans le menu.
0
cchristian Messages postés 921 Date d'inscription   Statut Membre Dernière intervention   131
 
Bonjour,

Voilà un petit programme simple qui m'a servi à identifier les touches : (thème reconnaissance de la touhe PF11, PF5 pour sortir)

int main() 
{ 

// Valeurs (codes ASCII) des principales touches du clavier. */ 
const int TOUCHE_ENTER = 13 ; 
const int TOUCHE_ECHAP = 27 ; 
const int TOUCHE_AJOUT = 82 ; 
const int TOUCHE_FLECHG = 75 ; 
const int TOUCHE_FLECHD = 77 ; 
const int TOUCHE_SUPPR = 83 ; 
const int TOUCHE_EFFACE = 71 ; 
const int TOUCHE_TABD = 9 ; 
const int TOUCHE_TABG = 8 ; 
const int TOUCHE_PAGTOP = 73 ; 
const int TOUCHE_PAGBOT = 81 ; 
const int TOUCHE_PF11 = 133 ; 
const int TOUCHE_PF12 = 134 ; 
const int TOUCHE_ABANDON_PFx = 63 ; 

signed int First_VAL_touches_PFx = 0 ; 
signed int VAL_touche_pressee = 0 ; 

while ( VAL_touche_pressee != TOUCHE_ABANDON_PFx ) // TOUCHE_ABANDON_PFx = 63 PF5 
      { 
//Lecture de la valeur identifiant un caractère ou une touche. 
        VAL_touche_pressee          = _getch () ; 
        First_VAL_touches_PFx       = VAL_touche_pressee ; 
// FILTRAGE DE LA NATURE DE LA TOUCHE PRESSEE 
        if ( First_VAL_touches_PFx == 8  || First_VAL_touches_PFx == 9 || 
             First_VAL_touches_PFx == 13 || First_VAL_touches_PFx == 27) 
          { 
           printf ("\n Vous avez pressé une touche autre que PF11 " 
                   "identifiée par 2 valeurs identiques %i et %i \n", 
                   First_VAL_touches_PFx, First_VAL_touches_PFx); 
          } 
        else 
          { 
// FILTRAGE DE LA TOUCHE PF11 (codes ASCII 224 133). 
//0 ou 224 premières valeurs reçues identifiant une touche1 
           if ( First_VAL_touches_PFx == 0 || First_VAL_touches_PFx == 224 ) 
             { 
// Lecture de la seconde valeur identifiant la touche activée. 
                VAL_touche_pressee = _getch () ; 
//133 seconde valeur reçue identifiant précisément PF11 
                if ( VAL_touche_pressee != 133 ) 
                 { 
                  printf ("\n Vous avez pressé une touche autre que PF11 " 
                          "identifiée par les valeurs %i et %i \n", 
                           First_VAL_touches_PFx, VAL_touche_pressee); 
                 } 
                else 
                 { 
                  printf ("\n\n Vous avez pressé la touche PF11 " 
                       "identifiée par les valeurs %i et %i \n\n",
	       First_VAL_touches_PFx, VAL_touche_pressee); 
                 } 
             } 
            else 
             { 
              printf ("\n Vous avez pressé une touche caractère " 
                      "alphanumerique identifiée par la valeur : %i \n",
		              First_VAL_touches_PFx); 
             } 
          } 
      } 

return 0;
}
3
mype Messages postés 2435 Date d'inscription   Statut Membre Dernière intervention   437
 
voila j'ai fait un petit programme qui fait ce que tu veux a toi de l'adapter a ton menu
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>

int main()
{
    int a,b,position;

    printf("Menu\n");
    printf("1- Choix 1\n");
    printf("2- Choix 2\n");
    printf("3- Choix 3\n");

    position = 1;

    while((a=getch())==224)
    {
        b=getch();
        if(b==80)
            if(position<3)
                position+=1;
        if(b==72)
            if(position>0)
                position-=1;
    }
    switch(position)
    {
        case 1: printf("Choix 1"); break;
        case 2: printf("Choix 2"); break;
        case 3: printf("Choix 3"); break;
        default: exit(-1);
    }
}
2
didy_gwatinik Messages postés 352 Date d'inscription   Statut Membre Dernière intervention   80
 
Je vais essayer ça, ca a l'air impec
0
didy_gwatinik Messages postés 352 Date d'inscription   Statut Membre Dernière intervention   80
 
Je l'ai adapté à mon code, ça marche très bien. Merci beaucoup. Je vais vous embêter encore un peu... Par soucis de visibilité pour l'utilisateur, je voudrai mettre un peu de couleur, autrement dit ma console est en noir et bleu, j'aimerai que l'utilisateur puisse voir sur quel champ il est par exemple je voudrai que le choix sans dans une couleur différente rouge par exemple. J'ai essayé de le faire mais e changement de couleur n'est pris en compte qu'une fois qu'on appuie sur Entrée, ça ne change pas la couleur du menu. Je ne vois pas à quel endroit il faut que j'inclus e changement de couleur.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
xxx102
 
Essayez getch().
2
mype Messages postés 2435 Date d'inscription   Statut Membre Dernière intervention   437
 
changer la couleur du menu en temps reel je pense pas que ça soit faisable a moins que je me trompe...en tout cas je vois pas comment faire peut etre une solution serait d'effacer la console a chaque fois et de réafficher le menu
0
van noctar
 
Existe t-il un moyen pour faire en sorte que il n'y ait pas besoin d'appuyer sur entrer sur valider la touche?
0
Nooby
 
Je voudrais simuler un texte, par appuis touche (ou une autre méthode si vous avez) mais par cette methode, les caractère ` ne passe pas (AltGr+7)
0
mype Messages postés 2435 Date d'inscription   Statut Membre Dernière intervention   437
 
sur windows ou linux ?
-1
didy_gwatinik Messages postés 352 Date d'inscription   Statut Membre Dernière intervention   80
 
windows
0
mype Messages postés 2435 Date d'inscription   Statut Membre Dernière intervention   437
 
ça doit ressembler un peu a ça
a=getchar();
if(a==224)
{
   b=getchar();
   if (b== //le chiffre apres 224 de la touche directionelle que tu veux)
       // tu fais le traitement
}

-1
didy_gwatinik Messages postés 352 Date d'inscription   Statut Membre Dernière intervention   80
 
J'ai un peu de mal là je dois l'avouer! Je suis dans mon menu, si l'utilisateur appuie disons 2 fois sur la touche du bas et une fois sur la touche du haut il va se retrouver au choix 2
comment le savoir?
0
mype Messages postés 2435 Date d'inscription   Statut Membre Dernière intervention   437
 
ah ben la il y a pas de secret va falloir le calculer...
tu fais une boucle puis quand tu vois que c'est le code ascii de la fleche bas qui est sorti tu rajoute 1 a la position a laquelle tu est dans le menu quand c'est le code ascci de la fleche haut tu retire 1 a la position a la fin du a la position dans le menu
par exemple
position =1;
while((a=getchar())==224)
{
if((b=getchar())==80)
position+=1;
if((b=getchar())==72)
position-=1;
}
bon pas sur que ce code marche exactement mais l'idee est là...
-1
didy_gwatinik Messages postés 352 Date d'inscription   Statut Membre Dernière intervention   80
 
je vais essayer ca merci beaucoup
0
matt
 
Pour afficher de la couleur en console, il faut utiliser <conio.h> sous visual C++ (ou sur d'autres IDE je sais pas)
Il y a :
https://openclassrooms.com/fr/courses (windows)
http://www.siteduzero.com/tutoriel-3-35298-des-couleurs-dans-la-console-linux.html (linux)
Pour mettre de la couleur en console (c'est en C mais ça marche en C++;) ) .
-1
ali balaw Messages postés 2 Date d'inscription   Statut Membre Dernière intervention  
 
bonjour,

je pas compris vraiment se que vous chercher.......
le code ascii
-2
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
Ce qu'il souhaitait était de connaître le code ascii des touches directionnelles...
Mais c'était il y a 5 ans et il a trouvé sa réponse...
0