web-dev-qa-db-fra.com

comment vérifier le caractère "backspace" en C

J'aimerais savoir comment vérifier si un utilisateur tape le caractère "backspace".

J'utilise la getch() function i.e. "key = getch()" dans mon programme C et j'aimerais vérifier quand on appuie sur la touche de retour arrière. la ligne:

 if(key = '\b') { ....

ne fonctionne pas.

20
joel

Le problème avec la lecture Backspace est que la plupart des terminaux sont "cuits" en ce sens que des touches telles que le retour arrière sont gérées par le pilote du terminal. Cependant, la fonction curses getch() peut lire le retour arrière car elle n'est pas liée au terminal.

Modifier

Je viens de remarquer que votre code est en utilisant getch() pour la saisie. J'ai exécuté un petit programme de test et getch() renvoie 127 lorsque vous appuyez sur la touche arrière. Donc essayez:

if (key == 127 || key == 8) { ... /* Checks for both Delete or Backspace */

Notez également que votre exemple de code utilise l'opérateur affectation= alors qu'il doit utiliser l'opérateur égalité, ==

27
SiegeX

Vous n'avez pas indiqué la bibliothèque dont provient la fonction getch() (elle ne fait pas partie du standard C), mais si c'est celle de ncurses, vous pouvez vérifier la valeur de key par rapport à KEY_BACKSPACE.

1
Adrian Lopez

Le type de flux d'E/S peut aider. Le flux d'entrée standard est une sorte de flux de ligne tamponné, qui ne se vide pas tant que vous n'avez pas écrit un caractère '\ n'. Le flux tamponné complet ne se vide jamais tant que la mémoire tampon n'est pas pleine. Si vous écrivez un retour arrière dans le flux de buff intégral, le '\ b' peut être capturé.

Référencez le programme d'avantages environnementaux Unix.

1
user531771

Essaye ça:

#include <stdio.h>      /* printf   */
#include <ctype.h>      /* isalpha isdigit isspace etc      */

#define FALSE 0
#define TRUE  1

/* function declarations */
int char_type(char);

main()
{
 char ch;

 ch = 127;
 char_type(ch);

 ch = '\b';
 char_type(ch);

 return 0;
}

int char_type(char ch)
{
 if ( iscntrl(ch) != FALSE)
   printf("%c is a control character\n", ch); 
}

Ceci est un programme complet mais il ne teste que les caractères de contrôle ..__ Vous pouvez utiliser les principes de celui-ci, votre choix. Juste apprendre aussi!

Voir: http://www.tutorialspoint.com/c_standard_library/ctype_h.htm ou recherchez les fonctions du fichier d'en-tête ctype.h de la bibliothèque standard C.

C'est bien que vous obteniez des commentaires ... Merci à tous pour l'info. Je cherchais juste le code de retour arrière et ai trouvé cette question.

BTW essayez '\ 0' avant tout caractère. Pas sûr de ce que ça fait mais ça arrête tout le code après. Est-ce que c'est comme le retour 0; ligne?

0
Douglas G. Allen