Forum Programmation.c++ récupération d'un caractère

Posté par  .
Étiquettes : aucune
0
18
oct.
2004
Bonjour... Petite question sans doute simple mais qui m'ennuie assez...

J'aurais aimé savoir comment je devais m'y prendre pour récupérer le code ascii d'un caractère tapé au clavier sachant que le caractère en question ne doit pas être affiché à l'écran ou doit être effacé tout de suite après la récupération. De plus il faudrait que j'ai un moyen que l'exécution de la fonction en cours soit suspendue tant que l'utilisateur n'entre rien. En fait j'aurais besoin d'un truc du genre :

int c;
c=recuptouche(stdin);

Si possible ça serait sympa d'utiliser les librairies standard.
Merci.
  • # cin ?

    Posté par  . Évalué à 3.

    cin >> c ?

    D'une manière générale, le fait qu'un caractère soit ou non affiché à l'écran (donc dans une console texte, je suppose) dépend de l'environnement dans lequel tu travailles. Donc sous Unix, il faudra reprogrammer les paramètres du terminal, il n'y a probablement pas de wrapper C++ pour cela ...
    • [^] # Re: cin ?

      Posté par  . Évalué à 3.

      Au fait, pour faire joujou avec les paramètres du terminal, qu'il soit réel et distant (VT100, Minitel 2) ou virtuel (xterm):

      $ man termios

      Sinon, en C (pas C++), un:

      c=fgetc(stdin ou TonFlux);

      ... devrait suffire.
  • # fonction de la lib stdio

    Posté par  . Évalué à 2.

    man getc et les fonction de la famille, ca a l'air de faire ce que tu veux, sans doute moyennant une boucle du style

    do{
    c=fgetc();
    }while(c!=matouche);

    de memoire getc attend un caractere avant de rendre la main.
  • # Petit exemple en C

    Posté par  . Évalué à 3.

    #include <stdlib.h>
    #include <stdio.h>
    #include <termios.h>
    #include <unistd.h>
    
    int main(void)
    {
            int c;
            struct termios *termios_p;
            termios_p=(struct termios *)malloc(sizeof(struct termios));
            tcflag_t lflag;
    
            // Récupération des attributs du terminal
            tcgetattr(0,termios_p);
            // Sauvegarde des attributs
            lflag=termios_p->c_lflag;
            // Modification
            termios_p->c_lflag &= ~(ECHO);
            tcsetattr(0,TCSANOW,termios_p);
    
            c=getc(stdin);
            printf("Pas d'echo du caractère tapé...\n");
            printf("caractère : %c ; code ASCII : %u 0X%X\n",c,c,c);
    
            // Rétablissement des attributs d'origine
            termios_p->c_lflag=lflag;
            tcsetattr(0,TCSANOW,termios_p);
    
            return 0;
    }
  • # Merci mais...

    Posté par  . Évalué à 1.

    Merci pour les explications et les exemples. Ceci dit, pour la récupération de caractères on a toujours besoin de valider (CR). Il n'y aurait pas moyen de s'affranchir du besoin de se servir de la touche entrée?
    • [^] # Re: Merci mais...

      Posté par  . Évalué à 3.

      - termios_p->c_lflag &= ~(ECHO);
      ---
      + termios_p->c_lflag &= ~(ECHO | ICANON);

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.