elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: AIO elhacker.NET 2021 Compilación herramientas análisis y desinfección malware


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  no entiendo el funcionamiento del getch
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: no entiendo el funcionamiento del getch  (Leído 1,863 veces)
raxor12

Desconectado Desconectado

Mensajes: 3


Ver Perfil
no entiendo el funcionamiento del getch
« en: 9 Febrero 2015, 06:46 am »

Tengo una duda con el funcionamiento del getch en este codigo

char a= NULL,b=NULL;
while(a!='a'){

if(kbhit()){
    a=getch();}

b=getch();
    cout << a;
    cout << b;
}

Si pongo el codigo asi no se guarda nada en la variable 'a' solo en la 'b' al menos que precione la flechas de direcciones, eso es lo unico a guarda en 'a'

pero si lo coloco sin b=getch() si me lo acepta

Enserio no entiendo alguien podria ayudarme!!


En línea

eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: no entiendo el funcionamiento del getch
« Respuesta #1 en: 9 Febrero 2015, 08:02 am »

Sucede lo siguiente:

"kbhit", que dicho sea de paso no forma parte del estándar de C, realiza una consulta al buffer del teclado y retorna 1 si hay datos a la espera de ser leídos. Dado que esta consulta no es bloqueante, salvo que haya datos en el buffer, el programa saltará el if y se irá directamente a la instrucción "b = getch( );". Dado que getch si es bloqueante, el programa se queda congelado a la espera de que introduzcas algo por el teclado. Cuando pulsas una tecla, entonces el programa almacena el dato en b y vuelve a repetir el bucle... si no te da tiempo a pulsar una tecla antes de que el programa vuelva a consultar "kbhit", el programa ignorará nuevamente la línea "a=getch();" y vuelta a empezar.

Cuando tu usas las teclas de dirección estás haciendo uso de caracteres extendidos... estos caracteres no ocupan un "char", sino dos o más, entonces la línea "b=getch()" extrae uno de esos... el bucle llega a "kbhit" y entonces sí hay datos en el buffer, por lo que ejecuta la instrucción "a=getch()".

Solo un par de aclaraciones adicionales:

1. El código es obligatorio decorarlo con las etiquetas GeSHi
2. Asignarle NULL a un char, si bien es algo que compila, no es técnicamente correcto, ya que puede dar la errónea sensación de que "a" y "b" son punteros. Es más conveniente sustituir esos "NULL" por '\0' (nota las comillas simples).

Un saludo.


En línea

raxor12

Desconectado Desconectado

Mensajes: 3


Ver Perfil
Re: no entiendo el funcionamiento del getch
« Respuesta #2 en: 10 Febrero 2015, 04:58 am »

Gracias por la aclaracion eferion! no conocia eso de caracteres extendido indagare sobre ellos un poco, y gracias por tu aclaraciones adicionales!

Pero me quedan unas dudas!
-kbhit() no me lee aunque deje un tecla presiona ¿por que?, porque el ciclo pasa muy rapido que no le da tiempo de leerlo?
-Y que son las etiquetas "GeSHi"

esas son mis dudas..

Gracias de ante mano!
En línea

eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: no entiendo el funcionamiento del getch
« Respuesta #3 en: 10 Febrero 2015, 09:10 am »

-kbhit() no me lee aunque deje un tecla presiona ¿por que?, porque el ciclo pasa muy rapido que no le da tiempo de leerlo?

kbhit no forma parte del estándar y no he tenido opción a usarla. Simplemente me he remitido a lo que he encontrado en Internet. Siento no poder ayudarte en este punto.

-Y que son las etiquetas "GeSHi"

En la ventana donde escribes mensajes, si miras encima de los iconos, encontrarás un combobox (las listas desplegables) con el texto "GeSHi". Si despliegas el control te aparecerán enumerados diferentes lenguajes de programación. Coloca el texto entre estas etiquetas y conseguirás que el mismo aparezca formateado y con colores, lo que facilita enormemente su lectura directamente desde el foro.

Un saludo.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
getch propia para no usar getch de conio
ASM
neo_from_cs_matrix 3 5,431 Último mensaje 24 Agosto 2011, 18:43 pm
por Eternal Idol
ayuda... tutorial getch
Programación C/C++
peterfly 3 3,153 Último mensaje 12 Diciembre 2011, 23:07 pm
por Firos
getch() y getche() sin conio.h « 1 2 »
Programación C/C++
abreu20011 10 9,667 Último mensaje 27 Octubre 2012, 19:56 pm
por theluigy13etv
Problema con un getch() indisciplinado « 1 2 »
Programación C/C++
SCUMM 12 5,519 Último mensaje 31 Enero 2014, 14:53 pm
por vangodp
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines