ayuda: kbhit() en iterador en c++

Iniciado por Nico01, 19 Julio 2015, 02:01 AM

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

Nico01

estoy programando necesito saber como hacer lo siguiente:
que el ciclo se repita cuando yo apreto una tecla pero que se termine cuando apreto escape
basicamente lo que tengo que hacer es esto:
Realiza un programa que genere las estadísticas de un jugador de ajedrez. Para ello se ingresara sucesivamente las letras G o P (Gano, Perdió)  Hasta que se presione ESC. Se debe ir informando en cada partido: Cantidad de partidos jugados, ganados y perdidos, racha (cantidad de partidos ganados o perdidos en forma consecutiva, los ganados como un número positivo, los perdidos como uno negativo), mejor y peor racha.

engel lex

Hola! veo que eres nuevo en el foro, te aclaro lo siguiente que es parte de las reglas del foro

primero, el titulo debe ser descriptivo
segundo, muestra tu código, puede ayudar
tercero, recomiendo aclarar lo que haces ya que podría ser con una librería diferente según el caso
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

Nico01

gracias ya lo modifique un poco espero que alcanze ya que no hice el codigo todavia y me da verguenza usar pseudo codigo

DarK_FirefoX

Cita de: Nico01 en 19 Julio 2015, 03:02 AM
gracias ya lo modifique un poco espero que alcanze ya que no hice el codigo todavia y me da verguenza usar pseudo codigo

Eso tampoco es descriptivo! Y si no tienes nada hecho, puedes intentar hacer algo y estaremos dispuesto a ayudarte en lo que no puedas. Pero debes intentarlo.

Salu2s


Nico01

#4
okey lo lamento no se muy bien expresarme pero e hecho un intento  aqui esta el codigo sin mostrar los resultados:
Código (cpp) [Seleccionar]
#include<iostream>
#include<conio.h>
#include<stdlib.h>
using namespace std;
int main()
{
   int cg=0,cp=0,cc=0,c=0;//contador partidas ganadas, perdidas ,consecutivas, contador de partidas
   char op;
   bool repeat=true;
   while(repeat==true)
        c++;
       cout<<"A ganado o perdido G o P ?"<<endl;
       cin>>op;
       if(op=='G'){
           cg++;
           cc++;}
        else {
           cp++;      
           cc--;}
       if(kbhit())
       {
           char s= getch();
           switch (s) {
           case 27:
               repeat=false;
               break;
                       }
       }
           
   
   
   return 0;
}



si hay algo mal o algo que deba saber por favor muestrenme

olvide poner el contador de partidas generales al principio del ciclo antes de las decisiones

Mod: Los códigos deben ir en etiquetas GeSHi... modifica el titulo del problema, "ayuda sobre el lenguaje c++" no indica sobre que va el problema, no hagas doble post, usa el boton modificar

DarK_FirefoX

#5
Hola, he visto tu código y tienes varios errores con respecto al mismo. Primero, todo lo que tienes después del while debes encerrarlo en {}, porque todo eso se va a ejecutar mientras vayas leyendo. Ahora, también una sugerencia, utiliza nombres descriptivos para las variables, o sea, si vas a crear una variable para contar las partidas ganadas, utiliza algo como partidasGanadas, así tu código será más legible.

No obstante, no manejo muy bien C++ y me encontré con el problema de que tienes que leer los caracteres G y P para identificar si "el jugador" ganó o perdió, y identificar la pulsación de la tecla ESC, lo cual me parece algo complicado para un ejercicio de una persona que está empezando a programar en C++, lo normal(mas sencillo) sería hasta que se encuentre una linea en blanco, no obstante, estuve mirando, y aquí te explican una manera de hacerlo, o sea, como capturar el ESC, pues como te puedes dar cuenta la consola está destinada a leer caracteres y esperar por un retorno de linea (o sea, ENTER), en el ejemplo que te ponen en esta lugar: http://stackoverflow.com/questions/20175165/read-int-numbers-from-cin-until-esc-is-pressed-c modifican el buffer de la entrada estándar para que no espere el salto de linea.

Lee eso y mira a ver que puedes ir sacando de ahi. Lo demás solo es cuestión de llevar la suma en los contadores y las variables para calcular la racha.

Salu2s

Nico01

#6
hola gracias , pero igual mente en el compilador que uso si acomodo las lineas en orden de prioridad no hace falta las llaves como todo va secuencial hasta que se iguala la linea , y  no es que recien empiezo a programar , por cierto aqui tengo un tipico caso de deteccion de eventos el temas es el siguiente: yo analizo las respuestas en forma de char pero si en el sub proceso interno el kbhit se activa (pulsando cualquier tecla[lo que sucede tambien con la g o p]) y detecta al caracter que se encuentra en la posicion 27 en la tabla ascii , entonces se cambia la condicion y el ciclo se rompe , porque si usara solo getch o cin, me frenaria el programa para pedirme algo que no sea g o p en cullo caso no serviria , ya que yo necesito que el programa se ejecute mientras no se presione esc, igual gracias y me fijare el link que comentaste.
el hecho de que despues use llaves fue fiaca de ordenar .