Les touche F..du clavier [Résolu]

Signaler
Messages postés
20
Date d'inscription
lundi 12 avril 2004
Statut
Membre
Dernière intervention
19 avril 2006
-
Messages postés
1910
Date d'inscription
vendredi 18 juin 2004
Statut
Modérateur
Dernière intervention
14 novembre 2014
-
salut,
je suis entrain d'ecrir un programme en c en mode dos (que j'éspere poster sur ce site), et j'aimerait y ajouter l'utilisation des toucher F1,F2... du clavier ,je trouve pas leurs code ascii .
si quelqu'un a une idée merci

15 réponses

Messages postés
1910
Date d'inscription
vendredi 18 juin 2004
Statut
Modérateur
Dernière intervention
14 novembre 2014
12
Salut,
Chaque touche du clavier a un code SCAN unique (1 octet). Seules les touches alphanumériques ont aussi un code ASCII (+ ENTREE, ECHAP, TAB, BACKSPACE). La touche "A" , d'un clavier AZERTY, a le même code SCAN que la touche "Q" du clavier QWERTY. Mais ils n'ont pas le même code ASCII . Ce dernier change d'ailleurs selon que la touche MAJ est appuyée ou non. La fonction getch() retourne le code ASCII de la touche tapée. Pour les touches F1-F12, elle retourne 0 (224 pour F11 et F12 sous Windows) puis met le code SCAN de la touche dans le buffer clavier. Il suffit d'appeler une deuxième fois getch(), sans avoir à taper de nouveau, pour retrouver le code SCAN de la touche. C'est une astuce que j'ai découvert au début des années 90 en travaillant sur TURBO C sous DOS. Je l'avais toujours utilisée dans mes applications pour permettre l'emploi des touches F1-F12 et ça marchait parfaitement.
N'oublie pas de cliquer sur "Réponse acceptée !" si c'est le cas.
Bonne programmation !
Messages postés
1160
Date d'inscription
vendredi 23 juillet 2004
Statut
Membre
Dernière intervention
21 octobre 2010
16
crée un pti prog en mode console qui attend un char au clavier et qui ressort ce char converti en int a l'ecran, tu auras les codes ascii ainsi.
Messages postés
1878
Date d'inscription
jeudi 16 octobre 2003
Statut
Membre
Dernière intervention
16 mars 2011
1
G U fait ça en C y a lgt, je rechercherai ça ce soir
++
Magic Nono: l'informagicien! 8-)
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
20
http://www.cppfrance.com/code.aspx?ID=9429

Te fatigue pas nono, on en a deja des dizaines de sources 'cin cout', je ne vois pas l'interet d'une de plus.

ciao...
BruNews, Admin CS, MVP VC++
Messages postés
1878
Date d'inscription
jeudi 16 octobre 2003
Statut
Membre
Dernière intervention
16 mars 2011
1
k merci BruNews

Magic Nono: l'informagicien! 8-)
Messages postés
1160
Date d'inscription
vendredi 23 juillet 2004
Statut
Membre
Dernière intervention
21 octobre 2010
16
bon de tete (avec mes vieux restes de C)

#include <stdio.h>

int main (void)
{
char C;
while (1)
{
scanf ("%c", &C);
if (isalpha (C)) break;
else printf ("%d\n", C);

}

return 0;

}

(dsl je me rappelle plus la bibli ou ya isalpha....)
si jai pas fait de fautes ca devrait marcher....
Messages postés
1160
Date d'inscription
vendredi 23 juillet 2004
Statut
Membre
Dernière intervention
21 octobre 2010
16
oups avait pas vu que vous aviez posté ca.....enfin, ca lui simplifiera peut-etre la vie
Messages postés
1160
Date d'inscription
vendredi 23 juillet 2004
Statut
Membre
Dernière intervention
21 octobre 2010
16
a ca y'es! isalpha c'est dans ctype.h (ou cctype selon ton compilo.......si il est a la norme ca sera #include <cctype> sinon ca sera #include <ctype.h>)
Messages postés
1878
Date d'inscription
jeudi 16 octobre 2003
Statut
Membre
Dernière intervention
16 mars 2011
1
isalpha serait inutile
une touche donnée suffit : exemple classique : 'q'

et pr le printf autant faire "%c %d",c,c

à propos leProv, juste ds une logique d'optimisation utilise des variables en minuscule....

++
Magic Nono: l'informagicien! 8-)
Messages postés
1160
Date d'inscription
vendredi 23 juillet 2004
Statut
Membre
Dernière intervention
21 octobre 2010
16
bah une touche suffit, chui daccord, mais cest plus pratique de pas avoir a la chercher, c'est tt. j'avais mis q au depart, mais imagine ton verouillage majuscule est verouillé et tas pas les diodes, tu vas galérer comme un abruti pour quitter ton prog (ca mest deja arrivé :D)....c'est juste une question de pratique. oui variable en minuscules, j'etais parti pr mettre une var plus longue en notation chai plus koi (je me rappelle jamais le nom de cette norme....mais je my conforme a peu pret), et jai changé d'avis sans changer ske je faisais, ca donne ca.....pr le printf, tt a fait daccord, cest vrai ke cest plus sympa (avec un \n a la fin encore plus mais bon on va pas chipoter....:D)
Messages postés
1878
Date d'inscription
jeudi 16 octobre 2003
Statut
Membre
Dernière intervention
16 mars 2011
1
logique d'optimisation

nan logique d'utilisation plutot

et ok pr le \n, CT implicite

d'hab, cond de sortie bateau: touche echap ou 'q' & 'Q'

++

Magic Nono: l'informagicien! 8-)
Messages postés
1910
Date d'inscription
vendredi 18 juin 2004
Statut
Modérateur
Dernière intervention
14 novembre 2014
12
Salut,
Les touches F1-F12 n'ont pas de codes ASCII. Pour les utiliser dans un programme il faudra récupérer leurs codes SCAN. La fonction getch() renvoie deux valeurs quand il s'agit d'une touche comme F1-F12. Il faudra récupérer la deuxième valeur avec un nouvel appel à getch(). La première valeur est 0 pour F1 à F10 et 224 pour F11-F12. Voici un petit exemple sous Visual C++ 6:
//---------------------------------------------------------------------------------------------
#include <conio.h>

void main()
{
int touche;
cprintf ("\nAppuyer sur la touche ECHAP pour quitter\n");
 	while(1)
{
          touche=getch();
  if (touche==0 || touche==224)
    { 
             cprintf("Scancode : ");//il s'agit d'un scancode
             cprintf("%d",touche);//1er retour de getch
             cprintf("%c",44);//insérer virgule
             touche=getch();//2eme appel 
   }
         cprintf ("%d\n",touche);// code ascii
 if (touche==27) return;
}
}
//---------------------------------------------------------------------------------------------

Ce petit source affiche les valeurs retournées par getch() pour les touches F1-F12 ou le code ASCII des autres touches.
A bientôt.
Messages postés
1910
Date d'inscription
vendredi 18 juin 2004
Statut
Modérateur
Dernière intervention
14 novembre 2014
12
J'ai oublié de préciser que pour le deuxième appel de getch(), on n'a pas besoin de taper de nouveau une touche, car cette fontion récupère la deuxième valeur qui reste encore dans le buffer clavier. Voilà.
Messages postés
20
Date d'inscription
lundi 12 avril 2004
Statut
Membre
Dernière intervention
19 avril 2006

merci racpp,
tu veut dire que les touche F ne sont pas exactement des codes ascii (il ne sont pas sur des octet mais sur 16 bit)
il faudra donc tester les deux octets qui constitue la touche
ok
Messages postés
1910
Date d'inscription
vendredi 18 juin 2004
Statut
Modérateur
Dernière intervention
14 novembre 2014
12
Cette astuce est valable aussi pour les touches fort utiles:
Flèche vers la gauche
Flèche vers la droite
Flèche vers le haut
Flèche vers le bas
Touche SUPPR
Touche INSERT
Touche FIN
Touche DEBUT
PAGE UP
PAGE DOWN