Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: prometheus48 en 31 Diciembre 2011, 18:58 pm



Título: Ayuda con getchar
Publicado por: prometheus48 en 31 Diciembre 2011, 18:58 pm
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
  1. #include <cstdlib>
  2. #include <iostream>
  3. #include <stdio.h>
  4.  
  5. using namespace std;
  6.  
  7. int main(int argc, char *argv[])
  8. {
  9.    int elec;
  10.    int level = 1;
  11.    string dir;
  12.  
  13.  
  14.    bool isRunning = true;//To finish the program when the player dies
  15.    //Introduction
  16.    system("title Lost!-PandoraX Studios");
  17.    cout<<"Welcome to Lost!!(0.1)You are a beta tester!";
  18.    cout<<"\n";
  19.    cout<<"This is a text game adventure!"<<endl;
  20.    cout<<"Created by Samuel Dominguez(PandoraX)";
  21.    cout<<"\nPandoraX!";
  22.    cout<<"\n\n";
  23.    cout<<"Press any key to start...";
  24.    getchar();
  25.  
  26.    //Main Game Loop
  27.    while (isRunning==true)
  28.    {
  29.    if(level==1)
  30.    {
  31.    cout<<"\nYou are sitting on the floor, all is full of snow.\n";
  32.    cout<<"and the floor is a mixture of ice and snow.\n";
  33.    cout<<"You look straight to the front, and you\n";
  34.    cout<<"see a polar bear running in your direction\n";
  35.    cout<<"Choices:\n";
  36.    cout<<"1)Run!\n";
  37.    cout<<"2)Cut your arm and give to the bear\n";
  38.    cout<<"3)Fight\n";
  39.    cout<<"4)Domesticate it\n";
  40.    cout<<">";            
  41.    level++;
  42.    cin>>elec;          
  43.    }
  44.  
  45.  
  46.    //1.1
  47.    if(elec==1)
  48.    {
  49.  
  50.               cout<<"In which direction?(north, west, east, south)\n";
  51.               cout<<">";
  52.               cin>>dir;
  53.               if(dir=="north")
  54.               {
  55.               cout<<"You runned in the direction were the polar\n";
  56.               cout<<"bear was!, the bear killed you...\n";
  57.               cout<<"\n";
  58.               cout<<"To play again just run Lost! again.\n";
  59.               cout<<"Press any key to exit...";
  60.               getchar();
  61.               isRunning=false;
  62.  
  63.  
  64.               }
  65.    }
  66.  
  67. }  
  68. return 0;
  69.  
  70. }
  71. [/code=cpp]
  72. Quisiera solucionar este problema este año XD.
  73.  
  74. Muchas gracias,
  75. Salu2
  76. Feliz Naviadad
  77. y..
  78. Feliz 2012!  
  79.  
  80.  
  81.  


Título: Re: Ayuda con getchar
Publicado por: Unbr0ken en 31 Diciembre 2011, 19:34 pm
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
  1. while(getchar() != '\n');
  2. getchar();

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

Salud.


Título: Re: Ayuda con getchar
Publicado por: 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


Título: Re: Ayuda con getchar
Publicado por: BlackZeroX en 31 Diciembre 2011, 20:47 pm
si estas en C++ usa

cin.get();

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

Dulces Lunas!¡.


Título: Re: Ayuda con getchar
Publicado por: Unbr0ken en 31 Diciembre 2011, 21:11 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
  1. 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.


Título: Re: Ayuda con getchar
Publicado por: 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!


Título: Re: Ayuda con getchar
Publicado por: Unbr0ken en 31 Diciembre 2011, 21:36 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 (http://www.zator.com/Cpp/E4_4_4.htm).

Feliz año igualmente ;)...

P.D.: Lee el tema: |Lo que no hay que hacer en C/C++. Nivel basico| (http://foro.elhacker.net/programacion_cc/lo_que_no_hay_que_hacer_en_cc_nivel_basico-t277729.0.html).