IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Comment gérer la touche echap ?


Sujet :

C

  1. #1
    Membre averti
    Inscrit en
    Février 2003
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 47
    Par défaut [résolu]*Comment gérer la touche echap ?
    Je voudrais reconnaitre la touche échap lorsque l'utilisateur appuie sur cette touche et pouvoir aussitot effectuer une tache comme vider l'écran.

    Le problème c'est que je ne sais pas à quoi cette touche correspond, et surtout comment la reconnaitre puisque l'user n'appuiera pas sur la touche de validation entree. En d'autres termes, je ne pourrais pas utiliser scanf()...

    Merci pour vos réponses

  2. #2
    Expert confirmé
    Avatar de Michaël
    Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2003
    Messages
    3 497
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Juillet 2003
    Messages : 3 497
    Par défaut
    salut,
    as-tu pensé à utiliser les fonctions du bios ? je m'explique :
    chaque touche du clavier renvoie un scancode. il suffirait donc de créer un petit programme pour lire ces scancodes... (pour connaitre celui de la touche echap) et ensuite inclure ce petit programme dans l'autre pour faire la tâche voulue...

    par contre si tu as linux (je n'en doute pas avec ton avatar ), ya un programme déja tout prêt qui existe. il te renvoie les scancodes en héxa sous la forme 0x01 par exemple. Je vais essayer de retrouver ce programme pour que tu vois...

    à+

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    10
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 10
    Par défaut
    Pour linux, tu peux utiliser la librairie ncurses.

    Tu peux trouver de la doc en français ici : http://perso.club-internet.fr/ariffa...html#resuindex. C'est bien expliqué

    Pour la télécharger : http://www.gnu.org/software/ncurses/ncurses.html

    Tu as pleins d'examples fournis.

    Bye

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 29
    Par défaut
    juste pour petit info la touche echap correspond au code : 27 en decimal donc tu n a qu a faire des test

    if(<variable>==27)clrscr();
    else ...

    pour savoir si on a utiliser la touche echap

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 29
    Par défaut
    petit supplement (en programmant avec borland)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    char c;
    c=getch();
    switch(c)
    {
     27: clrscr();//si echap efface ecran
           break;
     13: ce_que_tu_veu()//si touche entrer => ce que tu veu
           break;
     default : printf("choix non possible");
           break;
    }

  6. #6
    Membre averti
    Inscrit en
    Février 2003
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 47
    Par défaut
    OK, merci à tous.

    Petite remarque : les apparences peuvent etre trompeuses, mais j'ai bien Windows et pas Linux...

  7. #7
    Membre averti
    Inscrit en
    Février 2003
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 47
    Par défaut
    Je suis allé un peu vite en besogne :
    Le petit supplément ne compile pas chez moi avec devc++ :
    - Il me met "parse error before ';' "
    - puis en warning il me signale que c'est pas bien d'analyser un char avec switch()

    En plus, je sais pas vous, mais moi sous dos quand j'appuie sur echap il y a une petite flèche comme ça : "<-"

  8. #8
    Membre émérite
    Profil pro
    Eleveur de cornichons
    Inscrit en
    Juin 2002
    Messages
    1 074
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Eleveur de cornichons
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 074
    Par défaut
    salut

    C'est normal, getch() renvoie un int et non un char.
    Teste ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    int touche;
       touche=getch();
     if (touche==27);  
    clrscr() ;                                          
     ...
    J'ai aussi une fleche ... puisque c'est le char 27 (apparament), ca donne donc des trucs "bizarres" comme "1" qui donne un visage qui sourti

    Nas'

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 29
    Par défaut
    n

    C'est normal, getch() renvoie un int et non un char.
    Teste ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    int touche;
       touche=getch();
     if (touche==27);  
    clrscr() ;                                          
     ...
    Je suis pas d accord!! nan c'est pas ca mais le fait qu on retourne un entier ou un char ne pose pas de probleme a ce niveau je pens e plutot que c'est l'utilisation de la fonction getch() (qui fait parti des standard borland ainsi que la fonction clrscr()). si tu utilise dev c++ il faut utiliser les fonction getchar() (norme ansi c) ou peut etre la fonction getc(). Mais je suis sur que char c=getch(); marche (avec borland!!)

  10. #10
    Membre émérite
    Profil pro
    Eleveur de cornichons
    Inscrit en
    Juin 2002
    Messages
    1 074
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Eleveur de cornichons
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 074
    Par défaut
    Peut-être ouais ...
    Mais sur DevC++ , getch() marche très bien (avec un int) .
    Et le code que j'ai donné est testé et il marche ...

    Nas'

  11. #11
    Membre averti
    Inscrit en
    Février 2003
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 47
    Par défaut
    ca donne donc des trucs "bizarres" comme "1" qui donne un visage qui sourti
    oui !! le 2 aussi ça donne un visage qui sourit j'avais vu ça en regardant la table ASCII.
    si tu utilise dev c++ il faut utiliser les fonction getchar() (norme ansi c) ou peut etre la fonction getc(). Mais je suis sur que char c=getch(); marche (avec borland!!)
    Je viens de faire une recherche : pour devc++, getch marche que si l'on supprime dans le header conio.h la ligne :
    #define getch getchar //que si l'on programme en C

    Je vais essayer pour voir si ça marche.

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 29
    Par défaut
    c'est vrai j'ai pas tester mon code...

  13. #13
    Membre averti
    Inscrit en
    Février 2003
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 47
    Par défaut
    Arf, 3 messages en 3 minutes !
    Donc le code que t'a donné Nasky marche ? pour getch() t'a juste inclu <conio.c> ?

  14. #14
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 29
    Par défaut
    ah oui il faut des bibliotheque (tres juste) il faut faire
    #include<conio.h> et non .c

  15. #15
    Membre émérite
    Profil pro
    Eleveur de cornichons
    Inscrit en
    Juin 2002
    Messages
    1 074
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Eleveur de cornichons
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 074
    Par défaut
    Ba non avec DevC++ 4 getch() marche sans rien modifier.
    Essaye d'inclure conio.c et non conio.h ... j'utilise svt getch() sans probleme.
    Sinon pour le in et char, c'est vrai getch peut renvoye un char mais qd c'est un chiffre qu'on veut, on peut utiliser int par contre, quand c'est une chaine, on utilise plus souvent un char.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    char ch,buffer[10] ;
     
    while((ch=getch()) !='\n' && i<size) 
    buffer[i++]=ch ;
    Nas'

  16. #16
    Membre averti
    Inscrit en
    Février 2003
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 47
    Par défaut
    j'utilise svt getch() sans probleme.
    tiens, c'est bizarre, je suis obligé d'appuyer sur entree pour que la flèche affichée par la touche echap soit prise en compte et que l'écran soit vidé..

  17. #17
    Membre averti
    Inscrit en
    Février 2003
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 47
    Par défaut
    LOL
    Je viens de remplacer #include <conio.c> par : #include <conio.h> et ça marche !!! je comprends plus rien

    modification : je viens de revérifier, ça marche aussi avec <conio.c>.

  18. #18
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 29
    Par défaut
    Bon je dis plus rien pasque devC++ ca marche pas comme les autres...
    ... je rigole mais c'est vrai que vu tout ce qui a été dis je vois pas comment il marche et surtout si les normes sont bien respectés enfin bon sous builder j ai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    //pour builder faut pas que tu en tienne compte
    #pragma hdrstop
    #pragma argsused
     
    // prog en c
    #include<stdio.h>
    #include<conio.h>  //pour getch() j en suis sur !!!
    int main(int argc, char* argv[])
    {
            char c=getch();
            printf("%c",c);//affiche le caractere saisi
            getch();
            return 0;
    }
    et ca marche !!

  19. #19
    fd
    fd est déconnecté
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    131
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 131
    Par défaut
    T'as déja essayé d'expliquer le concept de la Programmation Orienté Objet à un enfant de 6 ans ?

  20. #20
    Membre averti
    Inscrit en
    Février 2003
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 47
    Par défaut
    Bon, c'est ok, ça marche mais j'ai un autre problème :
    si je voulais prendre en compte la touche échap c'est pour que l'utilisateur puisse revenir à un menu précédent sans appuyer sur une touche spéciale et valider.
    ex de dialogue :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     Entrez le montant de votre dépense : [touche échap] //au lieu de la somme attendue
          /*résultat : clrscr() et retour au menu*/
    Donc je suis en fait obligé de faire un goto dont le label correspondra à l'affichage du menu.

    Le problème, c'est que je dois placer le goto à l'intérieur d'une fonction et que le label est lui dans le main(). Et on me signale à la compilation que le label n'est pas défini dans cette fonction.

    Comment faire pour que le label soit connu dans la fonction ?

    grosso modo ça donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
     
    int lire_somme (...)
    { 
      int touche ;
      int montant ;  
      /*....*/
      touche=getch(); 
      if (touche==27) goto menup ; //le problème : menup est défini dans main
      else scanf("%d", &montant) ;
      return montant ; 
    }                                          
     
    int main()
    {
      int montant1 ;
      menup : /*affichage du menu*/
      /*...*/
      montant1=lire_somme(...)
      /*...*/
      return 0 ;
    }

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Gérer le touche Echap
    Par fabrice.s dans le forum C#
    Réponses: 5
    Dernier message: 28/12/2013, 08h33
  2. [AC-2007] Comment simuler la touche Echap
    Par JPJOLY dans le forum VBA Access
    Réponses: 6
    Dernier message: 14/11/2010, 17h13
  3. Comment gérer ma touche entre
    Par solaar dans le forum VBA Access
    Réponses: 0
    Dernier message: 09/07/2010, 16h09
  4. Evenement Onkey : comment gérer la touche control?
    Par Thi0123 dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 27/03/2008, 13h37
  5. Réponses: 1
    Dernier message: 30/12/2006, 10h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo