Romper ciclo sin interferir.

Iniciado por Ruben_efl18, 11 Mayo 2016, 02:59 AM

0 Miembros y 1 Visitante están viendo este tema.

Ruben_efl18

Buenas.   ::)
Les cuento el problema que tengo, básicamente estoy haciendo un reloj y quiero que solamente al oprimir una tecla este se detenga, pero no encuentro la forma mas eficiente de hacerlo, ya que con el código como lo tengo hace una pausa hasta que introduzca un dato, y eso no es lo que quiero, quiero que el reloj continué sin pausarse y en cualquier momento que teclee x tecla salga del mismo. Les anexo el código si me pueden ilustrar con esto estaría muy agradecido.

#include<stdio.h>
#include<time.h>
#include<conio.h


int main(){

char tecla;



do{
time_t tiempo=time(0);
                struct tm *tlocal = localtime(&tiempo);
                char output[128];
strftime(output,128,"%d/%m/%y %H:%M:%S",tlocal);
printf("%s\n",output);
Sleep(100);


tecla=getch();    //Este getch es el que menciono
if(tecla=='m')return 0;



system("cls");

}while(1);
printf("Saliendo..."); getch(); return 0;
}

geeke

Si usas conio.h dispones de kbhit()

Código (cpp) [Seleccionar]
if (kbhit())
{
    // Se presionó una tecla
}


Cabe destacar que conio.h no es estándar ni tampoco portable

ivancea96

Una opción, es que tengas un thread a parte que pida la entrada. Si la entrada es la que buscas, cambia por ejemplo una variable global "terminado = 1". El thread principal, lo único que haría es comprobar en cada ciclo si "terminado==1".

Otra opción, podría ser capturando una señal como la de interrupción, enviada al pulsar CTRL+C. No funcionará en todos los casos, pero es una opción en ese caso particular.
http://stackoverflow.com/questions/4217037/catch-ctrl-c-in-c