Code ASCII touche directionelles C [Résolu/Fermé]

Signaler
Messages postés
352
Date d'inscription
samedi 17 novembre 2007
Statut
Membre
Dernière intervention
30 mars 2010
-
Messages postés
11066
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
18 octobre 2016
-
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.

13 réponses

Messages postés
128
Date d'inscription
mardi 14 octobre 2008
Statut
Membre
Dernière intervention
18 octobre 2011
53
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;
}
4
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 56843 internautes nous ont dit merci ce mois-ci

Messages postés
352
Date d'inscription
samedi 17 novembre 2007
Statut
Membre
Dernière intervention
30 mars 2010
75
Ca ne marche pas pour les touches directionnelles, chez toi si?
Messages postés
921
Date d'inscription
lundi 21 janvier 2008
Statut
Membre
Dernière intervention
6 mars 2012
115
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;
}
Messages postés
2435
Date d'inscription
jeudi 1 novembre 2007
Statut
Membre
Dernière intervention
16 août 2010
411
sur windows leur codes ascii c'est 224 suivis de quelque chose
gauche: 224 75
haut: 224 72
droite: 224 77
bas: 224 80
Messages postés
352
Date d'inscription
samedi 17 novembre 2007
Statut
Membre
Dernière intervention
30 mars 2010
75
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.
Messages postés
2435
Date d'inscription
jeudi 1 novembre 2007
Statut
Membre
Dernière intervention
16 août 2010
411
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);
    }
}
Messages postés
352
Date d'inscription
samedi 17 novembre 2007
Statut
Membre
Dernière intervention
30 mars 2010
75
Je vais essayer ça, ca a l'air impec
Messages postés
352
Date d'inscription
samedi 17 novembre 2007
Statut
Membre
Dernière intervention
30 mars 2010
75
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.
Essayez getch().
Messages postés
2435
Date d'inscription
jeudi 1 novembre 2007
Statut
Membre
Dernière intervention
16 août 2010
411
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
Existe t-il un moyen pour faire en sorte que il n'y ait pas besoin d'appuyer sur entrer sur valider la touche?
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)
Messages postés
2435
Date d'inscription
jeudi 1 novembre 2007
Statut
Membre
Dernière intervention
16 août 2010
411
sur windows ou linux ?
Messages postés
352
Date d'inscription
samedi 17 novembre 2007
Statut
Membre
Dernière intervention
30 mars 2010
75
windows
Messages postés
2435
Date d'inscription
jeudi 1 novembre 2007
Statut
Membre
Dernière intervention
16 août 2010
411
ç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
}

Messages postés
352
Date d'inscription
samedi 17 novembre 2007
Statut
Membre
Dernière intervention
30 mars 2010
75
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?
Messages postés
2435
Date d'inscription
jeudi 1 novembre 2007
Statut
Membre
Dernière intervention
16 août 2010
411
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à...
Messages postés
352
Date d'inscription
samedi 17 novembre 2007
Statut
Membre
Dernière intervention
30 mars 2010
75
je vais essayer ca merci beaucoup
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++;) ) .
Messages postés
2
Date d'inscription
vendredi 27 décembre 2013
Statut
Membre
Dernière intervention
29 décembre 2013

bonjour,

je pas compris vraiment se que vous chercher.......
le code ascii
Messages postés
11066
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
18 octobre 2016
1 688
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...