Key_enter vs ' n'?
Pregunta
Cuando estoy usando PDCurses y trato de tener una salida de bucle de tiempo cuando se presione la tecla ENTER con while(key != KEY_ENTER)
, el bucle While nunca sale. Sin embargo, cuando trato de tener la misma salida de bucle con while((char)key != '\n')
, sale correctamente cada vez que presioné Enter. Por que '\n'
trabajar y no KEY_ENTER
?
por cierto, key
es un int
Y espero que estas sean las pocas líneas relevantes del código:
int key;
while((char)key != '\n') {
key = getch();
...
}
Solución
getch()
es una función definida por el estándar ANSI C para la biblioteca de tiempo de ejecución C.
En la mayoría de los sistemas, como Windows, Linux, etc., esta función se implementa para devolver '\n'
Cuando el usuario presionó entrar. A modo de comparación, en Windows, la Key-Press en sí (de Enter) podría representarse como el código clave VK_ENTER
.
PDCurses está traduciendo los códigos clave a los valores ASCII para usted.
Puede obtener los valores clave que desea si primero llama a las funciones de PDCurses raw(); nonl();
. Además, probablemente deberías usar wgetch()
para nuevo código.
Otros consejos
KEY_ENTER == 0x157, '\n' == 0xA
' n' es la nueva línea ASCII estándar, mientras que Key_enter representa un código de teclado. Ver el código PDCurses.
Para obtener más información, debe publicar la parte relevante de su código.