Rechercher : dans
Par :

Code ASCII touche directionelles C

Dernière réponse le 14 oct 2009 à 16:59:48 didy_gwatinik, le 25 oct 2008 à 12:48:34 
 Signaler ce message aux modérateurs

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.

Configuration: Windows XP
Firefox 3.0.3

Meilleures réponses pour « Code ASCII touche directionelles C » dans :
Interfacer du code assembleur et du C VoirInterfacer du code assembleur et du C Introduction Appeler du code assembleur écrit dans un fichier source externe Avec Nasm (x86 uniquement) Compilation/Execution sous Linux Avec Gcc (multiplateforme) Introduction Si, à tout hasard,...
La saisie sécurisée en C++ VoirLa saisie sécurisée en C++ 1. Sécuriser ses saisies grâce à la méthode "get()" 2. Sécuriser ses saisies grâce à la méthode "getline()" 3. Mince, ça marche pas... 4. La méthode "ignore()" Dans vos programmes, vous avez...
Les guillemets, apostrophes et les chaînes VoirComment jouer avec les guillemets et les apostrophes dans les chaînes 1. Préambule 2. Éviter une coupure dans la chaîne 3. Ajouter un guillemet dans la chaîne 3.1 Avec l'apostrophe 3.2 Avec l'ASCII 3.3 Directement 3.3.1 Méthode...
Code ASCII VoirLe codage des informations Le morse a été le premier codage à permettre une communication longue distance. C'est Samuel F.B.Morse qui l'a mis au point en 1844. Ce code est composé de points et de tirets (un codage binaire en quelque sorte...). Il...
Les chaînes de caractères en C++ VoirQu'est-ce qu'une chaîne de caractères ? Une chaîne de caractères (appelée string en anglais) est une suite de caractères, c'est-à-dire un ensemble de symboles faisant partie du jeu de caractères, défini par le code ASCII. En langage C++, une...
Langage C - Les chaînes de caractères VoirQu'est-ce qu'une chaîne de caractères ? Une chaîne de caractères (appelée string en anglais) est une suite de caractères, c'est-à-dire un ensemble de symboles faisant partie du jeu de caractères, défini par le code ASCII. En langage C, une chaîne...

1

sway-yazen, le 25 oct 2008 à 14:56:15
  • +2

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;
}

Répondre à sway-yazen

2

didy_gwatinik, le 25 oct 2008 à 14:59:29

Ca ne marche pas pour les touches directionnelles, chez toi si?

Répondre à didy_gwatinik

3

mype, le 25 oct 2008 à 16:00:05

Sur windows ou linux ?

Répondre à mype

4

didy_gwatinik, le 25 oct 2008 à 16:00:49

Windows

Répondre à didy_gwatinik

5

mype, le 25 oct 2008 à 16:04:25
  • +3

Sur windows leur codes ascii c'est 224 suivis de quelque chose
gauche: 224 75
haut: 224 72
droite: 224 77
bas: 224 80

Répondre à mype

6

didy_gwatinik, le 25 oct 2008 à 16:06:36

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.

Répondre à didy_gwatinik

7

mype, le 25 oct 2008 à 16:13:39

ç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
}

Répondre à mype

8

didy_gwatinik, le 25 oct 2008 à 16:23:28
  • +2

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?

Répondre à didy_gwatinik

9

cchristian, le 25 oct 2008 à 16:31:47
  • +1

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;
}
Cordialement.

Cchristian.

Répondre à cchristian

10

mype, le 25 oct 2008 à 16:38:14
  • +1

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à...

Répondre à mype

11

didy_gwatinik, le 25 oct 2008 à 16:39:11

Je vais essayer ca merci beaucoup

Répondre à didy_gwatinik

12

mype, le 25 oct 2008 à 17:05:36
  • +1

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);
    }
}

Répondre à mype

13

didy_gwatinik, le 25 oct 2008 à 20:13:12

Je vais essayer ça, ca a l'air impec

Répondre à didy_gwatinik

14

didy_gwatinik, le 26 oct 2008 à 02:07:31
  • +1

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.

Répondre à didy_gwatinik

15

mype, le 27 oct 2008 à 01:48:31

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

Répondre à mype

16

 matt, le 14 oct 2009 à 16:59:48

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 :
http://www.siteduzero.com/tutoriel-3-30826-des-couleurs-dans-la-console-windows.html (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++;) ) .

Répondre à matt
Collection CommentÇaMarche.net