<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=Content-Type content=text/html;charset=iso-8859-1>
<META content="MSHTML 6.00.6000.17080" name=GENERATOR></HEAD>
<BODY id=MailContainerBody
style="PADDING-RIGHT: 10px; PADDING-LEFT: 10px; PADDING-TOP: 15px; WORD-WRAP: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space"
bgColor=#ffffff leftMargin=0 topMargin=0 CanvasTabStop="true"
name="Compose message area">
<DIV><FONT face=Arial size=2>Ah! es verdad, que tu estabas liado con lo del
teclado, y claro cómo ya había perdido el hilo pensé que tu eras el que tenía
problema con los directorios y no se que.. total..prueba sustituir tu
procedimiento <STRONG>kbhit </STRONG>por éste otro...</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV>
<DIV><FONT face=Arial size=2>char teclaPulsada(void) {<BR> char
caracter;<BR> struct termio parametro_anterior, parametro;</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV>
<DIV><FONT face=Arial size=2>
ioctl(STDINFD,TCGETA,¶metro_anterior); // hacemos un backup, TC
get</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV>
<DIV><FONT face=Arial size=2> parametro = parametro_anterior;<BR>
parametro.c_lflag &= ~(ICANON|ECHO);<BR> parametro.c_cc[4] =
1;</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV>
<DIV><FONT face=Arial size=2> ioctl(STDINFD,TCSETA,¶metro); // le
pasamos los nuevos paramentros</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV>
<DIV><FONT face=Arial size=2> fflush(stdin); fflush(stderr);
fflush(stdout); // vaciamos los bufferes<BR>
read(STDINFD,&caracter,1); // Leemos un byte del buffer y lo asignamos al
caracter </FONT></DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV>
<DIV><FONT face=Arial size=2> ioctl(STDINFD,TCSETA,¶m_anterior);
// lo dejamos como estaba TC set<BR> return
caracter;<BR>}<BR></FONT></DIV>
<DIV><FONT face=Arial size=2>el tema es que sólo funcionará en Linux... <IMG
title="Triste icono gestual" style="FLOAT: none; MARGIN: 0px; POSITION: static"
tabIndex=-1 alt="Triste icono gestual"
src="cid:D5A4DCEF61F948039764FEE3AB414AC9@WhiteSkull"
MSNNonUserImageOrEmoticon="true"></FONT></DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV>
<DIV><FONT face=Arial size=2>Información sobre el acceso al teclado en Linux, la
necesitarás, yo ahora no puedo ayudarte porque estoy en Win y estoy ocupado... a
lo mejor mañana si continuas con problemas, probamos y tal</FONT></DIV>
<DIV><FONT face=Arial size=2><A
href="http://www.zator.com/Hardware/H7_1_2b.htm"><FONT face="Times New Roman"
size=3>http://www.zator.com/Hardware/H7_1_2b.htm</FONT></A></FONT><BR></DIV>
<DIV><FONT face=Arial size=2>suerte</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV>
<DIV> </DIV>
<DIV style="FONT: 10pt Tahoma">
<DIV style="BACKGROUND: #f5f5f5">
<DIV style="font-color: black"><B>From:</B> <A title=memmaker650@gmail.com
href="mailto:memmaker650@gmail.com">Jorge Vega Sanchez</A> </DIV>
<DIV><B>Sent:</B> Tuesday, August 31, 2010 9:05 PM</DIV>
<DIV><B>To:</B> <A title=cconclase@listas.conclase.net
href="mailto:cconclase@listas.conclase.net">Lista de correo sobre C y C++</A>
</DIV>
<DIV><B>Subject:</B> Re: [C con Clase] Terminar programa al pulsar tecla
escape.</DIV></DIV></DIV>
<DIV><BR></DIV>Pues o no lo se hacer lo que dices o no funciona.
<DIV>Lo que he hecho es sustituir return 0 por system("pause") y return 0.</DIV>
<DIV><BR>
<DIV>
<DIV>El 31/08/2010, a las 21:35, MuGliDaRk escribió:</DIV><BR
class=Apple-interchange-newline>
<BLOCKQUOTE type="cite">Al finalizar tu progrma
usa<BR><BR><BR><BR> system("PAUSE");<BR>
return EXIT_SUCCESS;<BR><BR>para al finalizar tu programa con escape. la
pantalla se detenga y no se cierre. y espera la pulsacion de cualquier tecla,
para cerrarse.<BR><BR><BR><BR><BR>
<DIV class=gmail_quote>El 31 de agosto de 2010 14:15, Jorge Vega Sanchez <SPAN
dir=ltr><<A
href="mailto:memmaker650@gmail.com">memmaker650@gmail.com</A>></SPAN>
escribió:<BR>
<BLOCKQUOTE class=gmail_quote
style="PADDING-LEFT: 1ex; MARGIN: 0pt 0pt 0pt 0.8ex; BORDER-LEFT: rgb(204,204,204) 1px solid">
<DIV style="WORD-WRAP: break-word">¿¿ Y porque si lo pongo en un hilo
cerrara el programa completo ???
<DIV><BR></DIV>
<DIV>Es que no entiendo tu respuesta.<BR>
<DIV>
<DIV>El 31/08/2010, a las 21:10, David Fire escribió:</DIV>
<DIV>
<DIV></DIV>
<DIV class=h5><BR>
<BLOCKQUOTE type="cite">pone el getch() en otro thread<BR><BR>
<DIV class=gmail_quote>El 31 de agosto de 2010 16:07, Jorge Vega Sanchez
<SPAN dir=ltr><<A href="mailto:memmaker650@gmail.com"
target=_blank>memmaker650@gmail.com</A>></SPAN> escribió:<BR>
<BLOCKQUOTE class=gmail_quote
style="PADDING-LEFT: 1ex; MARGIN: 0pt 0pt 0pt 0.8ex; BORDER-LEFT: rgb(204,204,204) 1px solid">
<DIV style="WORD-WRAP: break-word">Busque algo sobre algun port de knhit
a linux y encontre lo siguiente:
<DIV>En este enlace hay varias cosas.</DIV>
<DIV><BR></DIV>
<DIV>
<DIV>#include <stdio.h></DIV>
<DIV>#include <termios.h></DIV>
<DIV>#include <unistd.h></DIV>
<DIV>#include <sys/types.h></DIV>
<DIV>#include <sys/time.h></DIV>
<DIV><BR></DIV>
<DIV>void changemode(int);</DIV>
<DIV>int kbhit(void);</DIV>
<DIV>int main(void)</DIV>
<DIV>{</DIV>
<DIV> </DIV>
<DIV> changemode(1);</DIV>
<DIV> while ( !kbhit() )</DIV>
<DIV> {<SPAN> </SPAN>// Funciona sin introducir
caracteres.</DIV>
<DIV> }</DIV>
<DIV><BR></DIV>
<DIV> sleep(20);</DIV>
<DIV><SPAN></SPAN></DIV>
<DIV> </DIV>
<DIV> return 0;</DIV>
<DIV>}</DIV>
<DIV><BR></DIV>
<DIV>void changemode(int dir)</DIV>
<DIV>{</DIV>
<DIV> static struct termios oldt, newt;</DIV>
<DIV><BR></DIV>
<DIV> if ( dir == 1 )</DIV>
<DIV> {</DIV>
<DIV> tcgetattr( STDIN_FILENO, &oldt);</DIV>
<DIV> newt = oldt;</DIV>
<DIV> newt.c_lflag &= ~( ICANON | ECHO );</DIV>
<DIV> tcsetattr( STDIN_FILENO, TCSANOW,
&newt);</DIV>
<DIV> }</DIV>
<DIV> else</DIV>
<DIV> tcsetattr( STDIN_FILENO, TCSANOW,
&oldt);</DIV>
<DIV>}</DIV>
<DIV><BR></DIV>
<DIV>int kbhit (void)</DIV>
<DIV>{</DIV>
<DIV> struct timeval tv;</DIV>
<DIV> fd_set rdfs;</DIV>
<DIV> int ch=0,retorno;</DIV>
<DIV><BR></DIV>
<DIV> tv.tv_sec = 0;</DIV>
<DIV> tv.tv_usec = 0;</DIV>
<DIV><BR></DIV>
<DIV> FD_ZERO(&rdfs);</DIV>
<DIV> FD_SET (STDIN_FILENO, &rdfs);</DIV>
<DIV><BR></DIV>
<DIV> select(STDIN_FILENO+1, &rdfs, NULL, NULL,
&tv);</DIV>
<DIV> </DIV>
<DIV> ch = getchar();</DIV>
<DIV><BR></DIV>
<DIV> printf("Got %c \n", ch);</DIV>
<DIV> printf("En ASCII\n");</DIV>
<DIV> printf("tenemos %d\n", ch);</DIV>
<DIV> </DIV>
<DIV> printf("Caracteres raros: %d\n", FD_ISSET(STDIN_FILENO,
&rdfs));</DIV>
<DIV> if(ch!=27)</DIV>
<DIV> <SPAN> </SPAN>retorno=FD_ISSET(STDIN_FILENO,
&rdfs);</DIV>
<DIV> else</DIV>
<DIV> {</DIV>
<DIV> <SPAN> </SPAN>changemode(0);</DIV>
<DIV> <SPAN> </SPAN>return 0;</DIV>
<DIV> }</DIV>
<DIV> </DIV>
<DIV> return retorno;</DIV>
<DIV><BR></DIV>
<DIV>}</DIV>
<DIV><BR></DIV>
<DIV><BR></DIV>
<DIV>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.</DIV>
<DIV><BR></DIV>
<DIV>Por si alguien le echa un vistazo, el código es partiendo del
código de THANTOS pero modificado.</DIV>
<DIV><BR></DIV>
<DIV>Queda poco para la solucion final pero no consigo el punto que
falta.</DIV>
<DIV><BR></DIV>
<DIV>
<DIV>El 30/08/2010, a las 00:55, David Fire escribió:</DIV>
<DIV>
<DIV></DIV>
<DIV><BR>
<BLOCKQUOTE type="cite">SI se puede hacer con c/c++ estandar
<DIV>tenes q usar kbhit y getch</DIV>
<DIV>kbhit te dice si hay alguna tecla esperando para ser leida y
getch te da ese caracter.</DIV>
<DIV><BR></DIV>
<DIV>if(kbhit()){</DIV>
<DIV> c=getch();</DIV>
<DIV> if(c=ESC)</DIV>
<DIV> exit();</DIV>
<DIV>}</DIV>
<DIV><BR></DIV>
<DIV>saludos</DIV>
<DIV>David</DIV>
<DIV><BR>
<DIV class=gmail_quote>El 29 de agosto de 2010 16:05, Jorge Vega
Sanchez <SPAN dir=ltr><<A href="mailto:memmaker650@gmail.com"
target=_blank>memmaker650@gmail.com</A>></SPAN> escribió:<BR>
<BLOCKQUOTE class=gmail_quote
style="PADDING-LEFT: 1ex; MARGIN: 0pt 0pt 0pt 0.8ex; BORDER-LEFT: rgb(204,204,204) 1px solid">
<DIV style="WORD-WRAP: break-word">Y que librería puedo usar para
hacer esto.<BR>
<DIV>
<DIV>El 29/08/2010, a las 18:15, Pedro Rodríguez González
escribió:</DIV>
<DIV>
<DIV></DIV>
<DIV><BR>
<BLOCKQUOTE type="cite"><SPAN
style="WORD-SPACING: 0px; FONT: medium Helvetica; TEXT-TRANSFORM: none; TEXT-INDENT: 0px; WHITE-SPACE: normal; LETTER-SPACING: normal; BORDER-COLLAPSE: separate">
<DIV style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">Usando la
librería estándar de C/C++ ? Creo que no vas a
poder.<BR><BR>> From:<SPAN> </SPAN><A
href="mailto:memmaker650@gmail.com"
target=_blank>memmaker650@gmail.com</A><BR>> Date: Sun, 29 Aug
2010 10:52:37 +0200<BR>> To:<SPAN> </SPAN><A
href="mailto:cconclase@listas.conclase.net"
target=_blank>cconclase@listas.conclase.net</A><BR>> Subject:
[C con Clase] Terminar programa al pulsar tecla
escape.<BR>><SPAN> </SPAN><BR>>
Buenas.<BR>><SPAN> </SPAN><BR>> Estoy haciendo un
programa de linea de comandos. Me gustaría saber como hacer que al
pulsar la tecla escape se termine el programa.<BR>> 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.<BR>><SPAN> </SPAN><BR>> El programa va
soltando soluciones o datos y no sé como mezclar esto con la
deteccion de la tecla esc.<BR>><SPAN> </SPAN><BR>>
Gracias de antemano.<BR>>
_______________________________________________<BR>> Lista de
correo Cconclase<SPAN> </SPAN><A
href="mailto:Cconclase@listas.conclase.net"
target=_blank>Cconclase@listas.conclase.net</A><BR>><SPAN> </SPAN><A
href="http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net"
target=_blank>http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net</A><BR>>
Bajas:<SPAN> </SPAN><A
href="http://listas.conclase.net/index.php?gid=2&mnu=FAQ"
target=_blank>http://listas.conclase.net/index.php?gid=2&mnu=FAQ</A><BR>_______________________________________________<BR>Lista
de correo Cconclase<SPAN> </SPAN><A
href="mailto:Cconclase@listas.conclase.net"
target=_blank>Cconclase@listas.conclase.net</A><BR><A
href="http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net"
target=_blank>http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net</A><BR>Bajas:<SPAN> </SPAN><A
href="http://listas.conclase.net/index.php?gid=2&mnu=FAQ"
target=_blank>http://listas.conclase.net/index.php?gid=2&mnu=FAQ</A></DIV></SPAN></BLOCKQUOTE></DIV></DIV></DIV><BR></DIV><BR>_______________________________________________<BR>Lista
de correo Cconclase <A href="mailto:Cconclase@listas.conclase.net"
target=_blank>Cconclase@listas.conclase.net</A><BR><A
href="http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net"
target=_blank>http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net</A><BR>Bajas:
<A href="http://listas.conclase.net/index.php?gid=2&mnu=FAQ"
target=_blank>http://listas.conclase.net/index.php?gid=2&mnu=FAQ</A><BR></BLOCKQUOTE></DIV><BR><BR
clear=all><BR>-- <BR> (\__/) <BR>(='.'=)This is Bunny. Copy and
paste bunny into your <BR>(")_(")signature to help him gain world
domination.
<BR><BR></DIV>_______________________________________________<BR>Lista
de correo Cconclase <A href="mailto:Cconclase@listas.conclase.net"
target=_blank>Cconclase@listas.conclase.net</A><BR><A
href="http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net"
target=_blank>http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net</A><BR>Bajas:
<A href="http://listas.conclase.net/index.php?gid=2&mnu=FAQ"
target=_blank>http://listas.conclase.net/index.php?gid=2&mnu=FAQ</A></BLOCKQUOTE></DIV></DIV></DIV><BR></DIV></DIV><BR>_______________________________________________<BR>Lista
de correo Cconclase <A href="mailto:Cconclase@listas.conclase.net"
target=_blank>Cconclase@listas.conclase.net</A><BR><A
href="http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net"
target=_blank>http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net</A><BR>Bajas:
<A href="http://listas.conclase.net/index.php?gid=2&mnu=FAQ"
target=_blank>http://listas.conclase.net/index.php?gid=2&mnu=FAQ</A><BR></BLOCKQUOTE></DIV><BR><BR
clear=all><BR>-- <BR> (\__/) <BR>(='.'=)This is Bunny. Copy and paste
bunny into your <BR>(")_(")signature to help him gain world domination.
<BR><BR>_______________________________________________<BR>Lista de correo
Cconclase <A href="mailto:Cconclase@listas.conclase.net"
target=_blank>Cconclase@listas.conclase.net</A><BR><A
href="http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net"
target=_blank>http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net</A><BR>Bajas:
<A href="http://listas.conclase.net/index.php?gid=2&mnu=FAQ"
target=_blank>http://listas.conclase.net/index.php?gid=2&mnu=FAQ</A></BLOCKQUOTE></DIV></DIV></DIV><BR></DIV></DIV><BR>_______________________________________________<BR>Lista
de correo Cconclase <A
href="mailto:Cconclase@listas.conclase.net">Cconclase@listas.conclase.net</A><BR><A
href="http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net"
target=_blank>http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net</A><BR>Bajas:
<A href="http://listas.conclase.net/index.php?gid=2&mnu=FAQ"
target=_blank>http://listas.conclase.net/index.php?gid=2&mnu=FAQ</A><BR></BLOCKQUOTE></DIV><BR><BR
clear=all><BR>--
<BR>Atte.<BR>_______________________________<BR><BR><BR>_______________________________<BR><BR>
<DIV
style="COLOR: rgb(0,102,0); FONT-FAMILY: trebuchet ms,sans-serif; TEXT-ALIGN: center"><I><B>Antes
de imprimir este mensaje, asegúrese de que sea necesario. Proteger el medio
ambiente está en nuestras manos. <BR>Before you print this message, make sure
it is necessary. It is in our hands to protect our
environment.</B><BR></I></DIV><BR>_______________________________________________<BR>Lista
de correo Cconclase <A
href="mailto:Cconclase@listas.conclase.net">Cconclase@listas.conclase.net</A><BR><A
href="http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net">http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net</A><BR>Bajas:
<A
href="http://listas.conclase.net/index.php?gid=2&mnu=FAQ">http://listas.conclase.net/index.php?gid=2&mnu=FAQ</A></BLOCKQUOTE></DIV><BR></DIV>
<P>
<HR>
<P></P>_______________________________________________<BR>Lista de correo
Cconclase
Cconclase@listas.conclase.net<BR>http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net<BR>Bajas:
http://listas.conclase.net/index.php?gid=2&mnu=FAQ</BODY></HTML>