elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Los 10 CVE más críticos (peligrosos) de 2020


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  [Ayuda!] Como detener un ciclo (C)
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [Ayuda!] Como detener un ciclo (C)  (Leído 8,347 veces)
Snako

Desconectado Desconectado

Mensajes: 2



Ver Perfil
[Ayuda!] Como detener un ciclo (C)
« en: 11 Abril 2011, 04:32 am »

Buenas, soy estudiante de programación, apenas comenzando. En la facultad llevamos una materia donde vemos solo ejercicios, y esta última sesión se nos asignó un ejercicio algo complicado. No por todo el ejercicio en sí, sino por la funcionalidad que especificó el profesor.

Solo para mostrar de que trata:

Citar
El juego consiste en jugar con el CPU a realizar operaciones de sumar, restar, multiplicar o dividir en base a un mismo numero dentro de limites de tiempo.
La primera pantalla de dicho juego mostrara el siguiente menú:

1.- Sumas.
2.- Restas
3.- Multiplicaciones
4.- Divisiones
5.- Configuracion del juego.

Dentro de la configuracion del juego:

1.- Ajuste de nivel de dificultad (del 1 al 12)
2.- Asignar valor inicial.
3.- Asignar el valor de modificador.

-El nivel de dificultad, incrementa despues de 5 inferencias, teniendo más exitos que fracasos (3 de 5 para aumentar)
-En el nivel 1, el tiempo para responder es de 12 segundos, en el nivel 12 es de 0.1 segundos, (esto incluye el tiempo en teclear hasta que presiona "enter" el usuario).
-El juego termina al obtener mas fallos que exitos.
-Al final el programa debe de mostrar una pantalla con promedios y estadisticas por nivel y generales.

Mi duda surge de lo que está resaltado en negritas... Se supone que el juego, debe preguntar una operacion con datos especificados por el usuario -incluyendo el nivel de dificultad-.

(Supongamos 1+2... valor inicial=1, valor modificador=2), en cuanto el juego comienze y esta operación aparezca en pantalla, debe iniciarse un contador (supongamos de nivel 1, 12 segundos), y este contador debe continuar aun MIENTRAS el usuario introduce la respuesta y detenerse al presionar ENTER, para luego comparar la respuesta. En caso de que el tiempo se termine sin datos introducidos, debe pasar a la sig. operación.

¡Bueno! Ese es mi dilema, no tengo ni la menor idea de como detener este ciclo unicamente con la tecla ENTER, y que mientras este siga corriendo, me acepte los datos numericos del teclado.

Me han hablado de kbhit pero no he encontrado una forma de implementarla de la forma que deseo (ya que almacena caracteres segun entendí).

Esta es solo una muestra de la parte del codigo donde se realizaria la operacion/pregunta en caso de ser una suma, no incluyo todo lo demas para no confundir (y porque aun está en proceso jeje, pero mi única duda es ahí) :


                     
Citar
respuesta=valorinicial+valormod;

                     printf("%d + %d = ",valorinicial,valormod);
do{
    Sleep( (clock_t)1 * CLOCKS_PER_SEC );
    tiempo=tiempo-1;
    printf(" %d ",tiempo);

}while (tiempo>0); //*Ciclo que necesito detener con Enter y recibir datos*//
                            //*Recibir respuesta2*//

                     if (respuesta==respuesta2)
                     acierto=acierto+1;
                     else
                     fallo=fallo+1;


Sé que el incluir el tiempo restante cada segundo sería problematico (tal vez no solo visualmente) pero así se especificó, a menos de que pueda demostrarle al profesor porque no es conveniente..

Agradecería mucho su ayuda, criticas, apoyos, rosas, chocolates, mentadas de mami y demas.  :-*


En línea

Belial & Grimoire


Desconectado Desconectado

Mensajes: 559


Tea_Madhatter


Ver Perfil
Re: [Ayuda!] Como detener un ciclo (C)
« Respuesta #1 en: 11 Abril 2011, 04:59 am »

hola

jaja me dio risa lo de la ayuda

mmm, no se si entendi bien, talvez te den mejores sugerencias, pero espero haber entendido el problema... lo que tu quieres es que cuando el usuario oprima "enter" se detenga el ciclo?

si es asi, podrias hookear las teclas y poner en while que se termine cuando de cero ó "||" que cuando presionen enter tambien lo haga, por el foro hay un ejemplo de un keylogger, no recuerdo cual es la funcion que se usa para detectar las teclas, pero como te menciono por el foro se encuentra un ejemplo, podrias implementar esa funcion y detener el while cando presionen enter, creo es keycode o algo asip.

bueno, espero eso te sirva

salu2


En línea

.                                 
Akai


Desconectado Desconectado

Mensajes: 823



Ver Perfil
Re: [Ayuda!] Como detener un ciclo (C)
« Respuesta #2 en: 11 Abril 2011, 08:32 am »

En realidad, vuestro profesor sólo os ha mareado la perdiz de una forma tremenda.

Omite la parte de "(esto incluye el tiempo en teclear hasta que presiona "enter" el usuario)". Imagino que quería simplificar el asunto diciendo que consideréis el tiempo hasta que hayáis leído el número.

Simplemente haz un bucle que no se rompa mientras no haya pasado un tiempo o leído el número (usar una variable centinela para esto puede ser una idea).

Código
  1. int segons=5, centinela =1;
  2. clock_t espera;
  3. espera = clock () + segons * CLOCKS_PER_SEC ;
  4. while (clock() < espera && centinela) {}
  5. }

Este pequeño bloque de código se espera 5 segundos, si pones algo dentro del while, repetirá algo durante 5 segundos, y si lo modificas, hará lo que tu le hayas hecho que haga.
« Última modificación: 11 Abril 2011, 08:35 am por Akai » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[Ayuda]Ciclo Foreach PHP
PHP
rolly21102 4 5,019 Último mensaje 16 Junio 2010, 03:05 am
por bomba1990
Ayuda con un ciclo
Java
xAgramonx 3 3,373 Último mensaje 25 Noviembre 2010, 19:30 pm
por xAgramonx
Ayuda con función en ciclo FOR, nadieee ????
PHP
mokoMonster 5 4,066 Último mensaje 30 Enero 2011, 15:38 pm
por ~ Yoya ~
como romper, cerrar, salir de un ciclo!!!
Programación C/C++
astro1 6 37,596 Último mensaje 1 Junio 2011, 06:06 am
por 4rkn63l
La colaboración de los tuiteros ayuda a detener a 10 traficantes de droga
Noticias
wolfbcn 0 2,010 Último mensaje 5 Agosto 2012, 02:43 am
por wolfbcn
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines