[C con Clase] Terminar programa al pulsar tecla escape.

David Fire ddfire en gmail.com
Mar Ago 31 21:10:28 CEST 2010


pone el getch() en otro thread

El 31 de agosto de 2010 16:07, Jorge Vega Sanchez
<memmaker650 en gmail.com>escribió:

> Busque algo sobre algun port de knhit a linux y encontre lo siguiente:
> En este enlace hay varias cosas.
>
> #include <stdio.h>
> #include <termios.h>
> #include <unistd.h>
> #include <sys/types.h>
> #include <sys/time.h>
>
> void changemode(int);
> int  kbhit(void);
> int main(void)
> {
>
>   changemode(1);
>   while ( !kbhit() )
>   { // Funciona sin introducir caracteres.
>   }
>
>   sleep(20);
>
>   return 0;
> }
>
> void changemode(int dir)
> {
>   static struct termios oldt, newt;
>
>   if ( dir == 1 )
>   {
>     tcgetattr( STDIN_FILENO, &oldt);
>     newt = oldt;
>     newt.c_lflag &= ~( ICANON | ECHO );
>     tcsetattr( STDIN_FILENO, TCSANOW, &newt);
>   }
>   else
>     tcsetattr( STDIN_FILENO, TCSANOW, &oldt);
> }
>
> int kbhit (void)
> {
>   struct timeval tv;
>   fd_set rdfs;
>   int ch=0,retorno;
>
>   tv.tv_sec = 0;
>   tv.tv_usec = 0;
>
>   FD_ZERO(&rdfs);
>   FD_SET (STDIN_FILENO, &rdfs);
>
>   select(STDIN_FILENO+1, &rdfs, NULL, NULL, &tv);
>
>   ch = getchar();
>
>   printf("Got %c \n", ch);
>   printf("En ASCII\n");
>   printf("tenemos %d\n", ch);
>
>   printf("Caracteres raros: %d\n", FD_ISSET(STDIN_FILENO, &rdfs));
>   if(ch!=27)
>    retorno=FD_ISSET(STDIN_FILENO, &rdfs);
>   else
>   {
>    changemode(0);
>    return 0;
>   }
>
>   return retorno;
>
> }
>
>
> Con este código consigo que detecte que hemos pulsado la tecla escape en mi
> caso (si se pulsa cualquier otra no pasa nada. El problema es que no termina
> el programa hasta que se cumple el Sleep y se deberia de terminar el
> programa cuando pulse ESCAPE.
>
> Por si alguien le echa un vistazo, el código es partiendo del código de
> THANTOS pero modificado.
>
> Queda poco para la solucion final pero no consigo el punto que falta.
>
> El 30/08/2010, a las 00:55, David Fire escribió:
>
> SI se puede hacer con c/c++ estandar
> tenes q usar kbhit y getch
> kbhit te dice si hay alguna tecla esperando para ser leida y getch te da
> ese caracter.
>
> if(kbhit()){
>   c=getch();
>   if(c=ESC)
>     exit();
> }
>
> saludos
> David
>
> El 29 de agosto de 2010 16:05, Jorge Vega Sanchez <memmaker650 en gmail.com>escribió:
>
>> Y que librería puedo usar para hacer esto.
>> El 29/08/2010, a las 18:15, Pedro Rodríguez González escribió:
>>
>> Usando la librería estándar de C/C++ ? Creo que no vas a poder.
>>
>> > From: memmaker650 en gmail.com
>> > Date: Sun, 29 Aug 2010 10:52:37 +0200
>> > To: cconclase en listas.conclase.net
>> > Subject: [C con Clase] Terminar programa al pulsar tecla escape.
>> >
>> > Buenas.
>> >
>> > Estoy haciendo un programa de linea de comandos. Me gustaría saber como
>> hacer que al pulsar la tecla escape se termine el programa.
>> > Mi duda es como detectar el pulsado de la tecla ESC (en linux o MAC, no
>> en Windows) y si es imprescindible tener un bucle global que compruebe el
>> pulsado de la tecla o hay alguna otra forma más eficiente.
>> >
>> > El programa va soltando soluciones o datos y no sé como mezclar esto con
>> la deteccion de la tecla esc.
>> >
>> > Gracias de antemano.
>> > _______________________________________________
>> > Lista de correo Cconclase Cconclase en listas.conclase.net
>> >
>> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
>> > Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
>> _______________________________________________
>> Lista de correo Cconclase Cconclase en listas.conclase.net
>> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
>> Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
>>
>>
>>
>> _______________________________________________
>> Lista de correo Cconclase Cconclase en listas.conclase.net
>> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
>> Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
>>
>
>
>
> --
>  (\__/)
> (='.'=)This is Bunny. Copy and paste bunny into your
> (")_(")signature to help him gain world domination.
>
>  _______________________________________________
> Lista de correo Cconclase Cconclase en listas.conclase.net
> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
> Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
>
>
>
> _______________________________________________
> Lista de correo Cconclase Cconclase en listas.conclase.net
> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
> Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
>



-- 
 (\__/)
(='.'=)This is Bunny. Copy and paste bunny into your
(")_(")signature to help him gain world domination.
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20100831/0e0ee5f9/attachment.html>


Más información sobre la lista de distribución Cconclase