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 le getch() function i.e. "key = getch()" dans mon programme C et j'aimerais vérifier quand l'espace est pressé. la ligne:

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

ne fonctionne pas.

20
demandé sur Nakilon 2010-12-06 07:47:32

5 réponses

Le problème avec la lecture retour arrière est que la plupart des terminaux sont "cuits" en ce que les touches comme backspace sont gérées par le pilote du terminal. Cependant, la fonction de malédiction getch() peut lire à l'arrière car il n'est pas lié à la terminale.

Modifier

je viens de remarquer votre code en utilisant getch() pour l'entrée. J'ai couru un petit programme de test et getch() renvoie 127 lorsque vous appuyez sur backspace. Donc essayer:

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

Aussi notez que votre exemple de code utilise le affectation opérateur = quand il doit utiliser le l'égalité opérateur ==

27
répondu SiegeX 2010-12-06 06:13:49

Le type de flux d'e/s peut permet. Le flux d'entrée Standard est une sorte de flux de ligne tamponnée, qui ne sort pas tant que vous n'y écrivez pas un '\n' char. Le débit est complètement tamponné et ne sort jamais tant que le tampon n'est pas plein. Si vous écrivez un backspace dans un flux complet de buff, le '\b' peut être capturé.

référence le programme d'avantage d'environnement unix.

1
répondu user531771 2010-12-06 05:14:29

vous n'avez pas dit quelle bibliothèque getch() function vient (elle ne fait pas partie de la norme), mais si c'est celui de ncurses, vous pouvez vérifier la valeur de key contre KEY_BACKSPACE.

1
répondu Adrian Lopez 2016-09-07 06:57:49

essaye ceci:

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

C'est un programme complet, mais il ne teste que des caractères de contrôle. Vous pouvez utiliser les principes de votre choix. Juste aussi de l'apprentissage!

voir:http://www.tutorialspoint.com/c_standard_library/ctype_h.htm ou rechercher les fonctions pour le ctype.h fichier d'en-tête de la Bibliothèque C Standard.

il est bon que vous obtenez des entrées. Merci à tous pour l'info. Je regardais le code de backspace et j'ai trouvé ça. question.

BTW essayer '\0' avant tout char. Je ne sais pas ce que ça fait, mais ça arrête tout le code après. Est-ce que c'est comme le retour 0; line?

0
répondu Douglas G. Allen 2015-05-27 16:44:16

je crois que le pilote d'entrée du système est amorti. Donc ce n'est pas possible dans la norme C.

-3
répondu Madhur Ahuja 2010-12-06 04:54:34