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

Samuel Porras samuelporras en gmail.com
Mie Sep 1 04:01:24 CEST 2010


  Buenos días,
No creo que system("PAUSE") te valla a funcionar porque creo recordar 
que trabajas bajo linux y pause es un comando de windows, además esto no 
te detectará la tecla ESC sinó que te pondrá un mensaje en consola que dira:

Presione cualquier tecla para continuar...

y el programa esperara la pulsación de _cualquier_ tecla y se cerrará al 
pulsarla.

Un saludo!

El 31/08/2010 22:05, Jorge Vega Sanchez escribió:
> Pues o no lo se hacer lo que dices o no funciona.
> Lo que he hecho es sustituir return 0 por system("pause") y return 0.
>
> El 31/08/2010, a las 21:35, MuGliDaRk escribió:
>
>> Al finalizar tu progrma usa
>>
>>
>>
>>     system("PAUSE");
>>     return EXIT_SUCCESS;
>>
>> para al finalizar tu programa con escape. la pantalla se detenga y no 
>> se cierre. y espera la pulsacion de cualquier tecla, para cerrarse.
>>
>>
>>
>>
>> El 31 de agosto de 2010 14:15, Jorge Vega Sanchez 
>> <memmaker650 en gmail.com <mailto:memmaker650 en gmail.com>> escribió:
>>
>>     ¿¿ Y porque si lo pongo en un hilo cerrara el programa completo ???
>>
>>     Es que no entiendo tu respuesta.
>>     El 31/08/2010, a las 21:10, David Fire escribió:
>>
>>>     pone el getch() en otro thread
>>>
>>>     El 31 de agosto de 2010 16:07, Jorge Vega Sanchez
>>>     <memmaker650 en gmail.com <mailto: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 <mailto: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
>>>>>             <mailto:memmaker650 en gmail.com>
>>>>>             > Date: Sun, 29 Aug 2010 10:52:37 +0200
>>>>>             > To: cconclase en listas.conclase.net
>>>>>             <mailto: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
>>>>>             <mailto: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
>>>>>             <http://listas.conclase.net/index.php?gid=2&mnu=FAQ>
>>>>>             _______________________________________________
>>>>>             Lista de correo Cconclase
>>>>>             Cconclase en listas.conclase.net
>>>>>             <mailto: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
>>>>>             <http://listas.conclase.net/index.php?gid=2&mnu=FAQ>
>>>>
>>>>
>>>>             _______________________________________________
>>>>             Lista de correo Cconclase Cconclase en listas.conclase.net
>>>>             <mailto: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
>>>>             <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
>>>>         <mailto: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
>>>>         <http://listas.conclase.net/index.php?gid=2&mnu=FAQ>
>>>
>>>
>>>         _______________________________________________
>>>         Lista de correo Cconclase Cconclase en listas.conclase.net
>>>         <mailto: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
>>>         <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
>>>     <mailto: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
>>>     <http://listas.conclase.net/index.php?gid=2&mnu=FAQ>
>>
>>
>>     _______________________________________________
>>     Lista de correo Cconclase Cconclase en listas.conclase.net
>>     <mailto: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
>>     <http://listas.conclase.net/index.php?gid=2&mnu=FAQ>
>>
>>
>>
>>
>> -- 
>> Atte.
>> _______________________________
>>
>>
>> _______________________________
>>
>> /*Antes de imprimir este mensaje, asegúrese de que sea necesario. 
>> Proteger el medio ambiente está en nuestras manos.
>> Before you print this message, make sure it is necessary. It is in 
>> our hands to protect our environment.*
>> /
>>
>> _______________________________________________
>> Lista de correo Cconclase Cconclase en listas.conclase.net 
>> <mailto: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 
>> <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
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20100901/570dac69/attachment-0001.html>


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