<!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,&parametro_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,&parametro); // 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,&param_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>