[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