Ayuda con getchar

Iniciado por prometheus48, 31 Diciembre 2011, 18:58 PM

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

prometheus48

Hola,

Estaba haciendo una aventura de texto y tengo un problema con el bucle.
Miren, hay un bucle en el juego, y dentro hay varios if's, hay un if que dice que si el
jugador elige la opcion de ir al Norte, el juego termina pues se atopado con un oso polar. Entonces lo que pasa esque el bucle tiene al condicion de que mientras la variable booleana isRunning sea true corra, pero en ese if tengo puesto texto, para informar al jugador de lo que ha pasado, despues hay un getchar(); y DESPUES del getchar dice:
isRunning=false;
y lo que pasa esque cuando le dices al juego que quieres ir al norte, el juego se cierra, como si no ejecutara el getchar, y si funciona si pongo un system pause,
no se porque, bueno aqui esta el codigo:
Código (cpp) [Seleccionar]

#include <cstdlib>
#include <iostream>
#include <stdio.h>

using namespace std;

int main(int argc, char *argv[])
{
   int elec;
   int level = 1;
   string dir;
   
   
   bool isRunning = true;//To finish the program when the player dies
   //Introduction
   system("title Lost!-PandoraX Studios");
   cout<<"Welcome to Lost!!(0.1)You are a beta tester!";
   cout<<"\n";
   cout<<"This is a text game adventure!"<<endl;
   cout<<"Created by Samuel Dominguez(PandoraX)";
   cout<<"\nPandoraX!";
   cout<<"\n\n";
   cout<<"Press any key to start...";
   getchar();
   
   //Main Game Loop
   while (isRunning==true)
   {
   if(level==1)
   {
   cout<<"\nYou are sitting on the floor, all is full of snow.\n";
   cout<<"and the floor is a mixture of ice and snow.\n";
   cout<<"You look straight to the front, and you\n";
   cout<<"see a polar bear running in your direction\n";
   cout<<"Choices:\n";
   cout<<"1)Run!\n";
   cout<<"2)Cut your arm and give to the bear\n";
   cout<<"3)Fight\n";
   cout<<"4)Domesticate it\n";
   cout<<">";            
   level++;
   cin>>elec;          
   }
   
   
   //1.1
   if(elec==1)
   {
             
              cout<<"In which direction?(north, west, east, south)\n";
              cout<<">";
              cin>>dir;
              if(dir=="north")
              {
              cout<<"You runned in the direction were the polar\n";
              cout<<"bear was!, the bear killed you...\n";
              cout<<"\n";
              cout<<"To play again just run Lost! again.\n";
              cout<<"Press any key to exit...";
              getchar();
              isRunning=false;
             
                           
              }
   }
   
}  
return 0;

}
[/code=cpp]
Quisiera solucionar este problema este año XD.

Muchas gracias,
Salu2
Feliz Naviadad
y..
Feliz 2012!  
   

"Si tú tienes una manzana, y yo otra, y las intercambiamos, tu sigues teniendo una manzana, y yo sigo teniendo una manzana.
Pero, si tu tienes una idea, y yo otra, y nos las intercambiamos, tu tienes dos ideas, y yo tengo dos ideas"
The knowledge is free

Unbr0ken

#1
Hmmm... que código más desordenado.

La función getchar() no funciona porque no se limpió el salto de linea, entonces getchar() procede a leer ese salto de línea (ENTER), por tal, sigue el programa con la siguiente función, como no hay ninguna, simplemente se cierra.

Remplaza entonces, el getchar() que "no te funciona" por este par de líneas:

Código (cpp) [Seleccionar]
while(getchar() != '\n');
getchar();


Con esto, se "limpian" los saltos de línea y procede a esperar como de costumbre.

Salud.
Cita de: SnowcrashDiscutir con desconocidos por internet es un ejercicio de imbéciles; todos acaban siendo quinceañeros arrogantes con cantidades infinitas de tiempo libre.

NO resuelvo dudas vía MP, para algo está el foro.

prometheus48

Muchas Gracias.!
Oye, respecto al código desordenado, a que te refieres?¿Qué hago mal?
¿Como podría mejorar?
Gracias
"Si tú tienes una manzana, y yo otra, y las intercambiamos, tu sigues teniendo una manzana, y yo sigo teniendo una manzana.
Pero, si tu tienes una idea, y yo otra, y nos las intercambiamos, tu tienes dos ideas, y yo tengo dos ideas"
The knowledge is free

BlackZeroX

si estas en C++ usa

cin.get();

y para lo del getchar()... usa fflush() para forzar a stdin (no es recomendable...)

Dulces Lunas!¡.
The Dark Shadow is my passion.

Unbr0ken

#4
Cita de: prometheus48 en 31 Diciembre 2011, 20:02 PM
Muchas Gracias.!
Oye, respecto al código desordenado, a que te refieres?¿Qué hago mal?
¿Como podría mejorar?
Gracias

No haces nada mal, pero... hay demasiados saltos de línea fuera de lugar, combinas los métodos para saltar líneas sin sentido, déjate de eso, usa el \n o endl cuando sea realmente necesario.

Hay partes del código bastante inútiles, como los parámetros que pides en la función main:

Código (cpp) [Seleccionar]
int main(int argc, char *argv[])

Ni si quiera los usas, sí... es la forma estándar de declarar un punto de entrada, pero si no vas a usar los parámetros que pides, sería más "limpio" dejarlo sin ellos.

Usas muchísimos cout seguidos, cuando con un par estaría más que bien. Es muy inútil hacer tantas llamadas a una misma función cuando puedes hacer muchas menos con el mismo resultado.

Ya por lo demás, con el tiempo te darás cuenta e irás mejorando poco a poco, por mi lado, no soy un experto en C++, llevo unas semanas de haberme iniciado, pero desde C# me traje muy buenos hábitos de programación.
Cita de: SnowcrashDiscutir con desconocidos por internet es un ejercicio de imbéciles; todos acaban siendo quinceañeros arrogantes con cantidades infinitas de tiempo libre.

NO resuelvo dudas vía MP, para algo está el foro.

prometheus48

Muchas Gracias!
Oye, con lo de cout, se puede utilizar solo una vez?
Osea cout<<"kkkkkkkkkkkkk\nsssssssssssssssss\n";
??
Ah, lo de los parametros los pongo porque son los estandares, y la verdad no se que significan..
¿M epodrias decir para que sirven?
Gracias!
Feliz Año nuevo!
"Si tú tienes una manzana, y yo otra, y las intercambiamos, tu sigues teniendo una manzana, y yo sigo teniendo una manzana.
Pero, si tu tienes una idea, y yo otra, y nos las intercambiamos, tu tienes dos ideas, y yo tengo dos ideas"
The knowledge is free

Unbr0ken

Cita de: prometheus48 en 31 Diciembre 2011, 21:27 PM
Muchas Gracias!
Oye, con lo de cout, se puede utilizar solo una vez?
Osea cout<<"kkkkkkkkkkkkk\nsssssssssssssssss\n";
??
Ah, lo de los parametros los pongo porque son los estandares, y la verdad no se que significan..
¿M epodrias decir para que sirven?
Gracias!
Feliz Año nuevo!

Por supuesto que se puede utilizar solo una vez, el único problema es que puede tornarse demasiado larga la línea a imprimir... pero como es sólo código escrito, no habrá problema alguno.

Ahora, para que te saques todas las dudas de encima, lee este artículo sobre la función main.

Feliz año igualmente ;)...

P.D.: Lee el tema: |Lo que no hay que hacer en C/C++. Nivel basico|.
Cita de: SnowcrashDiscutir con desconocidos por internet es un ejercicio de imbéciles; todos acaban siendo quinceañeros arrogantes con cantidades infinitas de tiempo libre.

NO resuelvo dudas vía MP, para algo está el foro.