cómo verificar el carácter “retroceso” en C

4 minutos de lectura

avatar de usuario
joel

Me gustaría saber cómo verificar si un usuario escribe el carácter de “retroceso”.

estoy usando el getch() function i.e. "key = getch()" en mi programa C y me gustaría verificar cuándo se presiona la tecla de retroceso. la línea:

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

no funciona

  • ¿Has intentado mirar la función ‘teclado’?

    – Óscar Mederos

    6 de diciembre de 2010 a las 4:56

  • @Andrew White: Bell es \a.

    – efímero

    6 de diciembre de 2010 a las 4:58

  • y también necesitas dos signos iguales == en lugar de = para comparacion

    – Afriza N. Arief

    6 de diciembre de 2010 a las 5:01

  • @ephemient Estoy corregido, gracias por aclarar eso.

    – Andrés Blanco

    6 de diciembre de 2010 a las 5:04

avatar de usuario
asedioX

El problema con la lectura Retroceso es que la mayoría de los terminales están ‘cocinados’ en el sentido de que las teclas, como la tecla de retroceso, son manejadas por el controlador del terminal. Sin embargo, las maldiciones funcionan getch() puede leer el retroceso ya que no está vinculado a la terminal.

Editar

Acabo de ver tu código es utilizando getch() para entrada Ejecuté un pequeño programa de prueba y getch() devuelve 127 cuando presiona la tecla de retroceso. Por lo tanto, intente:

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

También tenga en cuenta que su código de muestra utiliza el asignación operador = cuando debería estar usando el igualdad operador ==

  • +1. Ver también: stackoverflow.com/questions/3167733/…

    – Señor Gómez

    6 de diciembre de 2010 a las 4:58

  • De manera confusa, el código ASCII real para “retroceso” es 8 (\b, ^H); 127 (^?) es “eliminar”. Si la tecla etiquetada como “retroceso” (o “eliminar”) en su teclado está enviando un “8” o “127” varía según la configuración de su aplicación de terminal. Es posible que desee verificar ambos.

    – David Gelhar

    6 de diciembre de 2010 a las 5:33

  • @SiegeX Gracias por su respuesta. Fue muy útil. Además, estoy corregido con mi uso del operador de asignación en lugar del operador de igualdad. Salud.

    – joel

    6 de diciembre de 2010 a las 5:35

  • ¿Cómo consigues que el cuadro sombreado represente una clave con Markdown?

    – Karl Knechtel

    6 de diciembre de 2010 a las 5:38

  • @Karl Knechtel Texto clave

    – SiegeX

    6 de diciembre de 2010 a las 6:17


El tipo de flujo de E/S puede ayudar. El flujo de entrada estándar es un tipo de flujo con búfer de línea, que no se vacía hasta que escribe un carácter ‘\n’ en él. El flujo almacenado en búfer completo nunca se descarga hasta que el búfer esté lleno. Si escribe un retroceso en el flujo de beneficio completo, es posible que se capture el ‘\b’.

Haga referencia al programa de ventajas del entorno de Unix.

No dijiste qué biblioteca getch() proviene de la función (no es parte del estándar C), pero si es el de ncurses, puede verificar el valor de key en contra KEY_BACKSPACE.

avatar de usuario
douglas g allen

Prueba esto:

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

Este es un programa completo pero solo prueba los caracteres de control. Podrías usar los principios de la misma, tu elección. ¡Solo estoy aprendiendo también!

Ver : http://www.tutorialspoint.com/c_standard_library/ctype_h.htm o busque las funciones para el archivo de encabezado ctype.h de la biblioteca estándar de C.

Es bueno que estés recibiendo información. Gracias a todos por la información. Estaba buscando el código de retroceso y encontré esta pregunta.

Por cierto, intente ‘\ 0’ antes de cualquier carácter. No estoy seguro de lo que hace, pero detiene todo el código después de eso. ¿Es eso como el retorno 0; ¿línea?

Creo que el controlador de entrada del sistema tiene un búfer de línea. Entonces no es posible en el estándar C.

  • No es “el controlador de entrada del sistema”; es otro programa que está formateando la entrada a su programa.

    – Karl Knechtel

    6 de diciembre de 2010 a las 5:40

  • No es “el controlador de entrada del sistema”; es otro programa que está formateando la entrada a su programa.

    – Karl Knechtel

    6 de diciembre de 2010 a las 5:40

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad