[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