Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Deseo que cuando pulse enter a secas se finalice el programa

Estas en el tema de Deseo que cuando pulse enter a secas se finalice el programa en el foro de C/C++ en Foros del Web. Hola que tal soy nuevo por aquí. Estoy empezando a hacer mis primeras cosas en C++, soy novato (he leído cosas referentes a C++ pero ...
  #1 (permalink)  
Antiguo 25/04/2014, 13:10
 
Fecha de Ingreso: abril-2014
Mensajes: 4
Antigüedad: 10 años
Puntos: 0
Deseo que cuando pulse enter a secas se finalice el programa

Hola que tal soy nuevo por aquí.

Estoy empezando a hacer mis primeras cosas en C++, soy novato (he leído cosas referentes a C++ pero como sabeis donde se aprende es programando)

Bueno al lío, tengo el siguiente programa :

Código c++:
Ver original
  1. #include <iostream>
  2. #include <ctime>
  3. #include <cstdlib>
  4.  
  5. using namespace std;
  6.  
  7. int main()
  8. {
  9.  
  10.     char mas;
  11.  
  12.     do {
  13.  
  14.     srand( time(NULL) );
  15.  
  16.     const char *ordenador[3] = { "piedra", "papel", "tijera" };
  17.     int s = rand() % 3;
  18.  
  19.     enum resultado_t { PIEDRA, PAPEL, TIJERA };
  20.  
  21.     cout << "Eleccion de la maquina: " << ordenador[s] << endl;
  22.  
  23.     int eleccion;
  24.  
  25.     cout << "Introduce n. jugada (1 = piedra, 2 = papel, 3 = tijera): ";
  26.     cin >> eleccion;
  27.     cout << endl;
  28.  
  29.     --eleccion;
  30.  
  31.     if(eleccion == s)
  32.     {
  33.         cout << "Empate!" << endl;
  34.     }
  35.  
  36.     else if(eleccion == PIEDRA)
  37.     {
  38.         if(s == PAPEL)
  39.             cout << "Perdistes!" << endl;
  40.         else
  41.             cout << "Ganastes!" << endl;
  42.     }
  43.     else if(eleccion == PAPEL)
  44.         if(s == PIEDRA)
  45.             cout << "Ganastes!!" << endl;
  46.         else
  47.             cout << "Perdistes!!" << endl;
  48.     else
  49.         if(s == PIEDRA)
  50.             cout << "Perdistes!!!" << endl;
  51.         else
  52.             cout << "Ganastes!!!" << endl;
  53.  
  54.     cout << "¿Quieres jugar otra vez? (presiona s/S y enter si quieres seguir jugando o simplemente presiona enter si quiere salir) ";
  55.     cin >> mas;
  56.  
  57.     } while(mas == 's' || mas == 'S' && cin.get()!='\n');
  58.  
  59.     return 0;
  60. }

Lo que pretendo es que si cuando me pregunto si quiero seguir, que si pulso s o S vuelva a iniciarse, esto se hace bien, pero quiero que si pulsas ENTER a secas el programa finalize, ¿cómo puedo lograrlo?

Un saludo y gracias.
  #2 (permalink)  
Antiguo 25/04/2014, 16:30
Avatar de vangodp  
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 10 años, 6 meses
Puntos: 38
Respuesta: Deseo que cuando pulse enter a secas se finalice el programa

Código C++:
Ver original
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. int main () {
  5.  
  6.     string key;
  7.    
  8.     do {       
  9.         cout << "presione return para salir";
  10.         getline ( cin, key );
  11.         if ( key.empty() ) { //comprobamos si getline recibio algo si solo pulsamos enter baybay no se ejecutara ninguna sentencia mas
  12.             return 0;
  13.         }      
  14.        
  15.     } while ( true );
  16.    
  17.     return 0;
  18. }


puedes poner otro if else o lo que sea para seguir ;), recuerda return == matado de cuajo XDD
Si quieres continuar después de pulsar enter fuera del bucle while, cambia return por break, eso romperá el bucle pero seguirá después de el.
  #3 (permalink)  
Antiguo 26/04/2014, 13:49
 
Fecha de Ingreso: abril-2014
Mensajes: 4
Antigüedad: 10 años
Puntos: 0
Respuesta: Deseo que cuando pulse enter a secas se finalice el programa

Que tal, gracias por la respuesta

He compilado tu código en un nuevo proyecto y funciona a la perfección, pero adaptando el código al mío el programa se cierra automáticamente, es como si estuviese pillando un vacio anteriormente o algo de eso, la cuestión es que no se como arreglarlo.

También al ser ahora la variable "mas" un string y no un char como antes estoy teniedo problemas a la hora de decirle que si es una s minúscula o mayúscula ejecute el bucle de nuevo.

Te pego el nuevo código, gracias y un saludo.

Código c++:
Ver original
  1. #include <iostream>
  2. #include <ctime>
  3. #include <cstdlib>
  4.  
  5. using namespace std;
  6.  
  7. int main()
  8. {
  9.  
  10.     string mas;
  11.  
  12.     do {
  13.  
  14.     srand( time(NULL) );
  15.  
  16.     const char *ordenador[3] = { "piedra", "papel", "tijera" };
  17.     int s = rand() % 3;
  18.  
  19.     enum resultado_t { PIEDRA, PAPEL, TIJERA };
  20.  
  21.     cout << "Eleccion de la maquina: " << ordenador[s] << endl;
  22.  
  23.     int eleccion;
  24.  
  25.     cout << "Introduce n. jugada (1 = piedra, 2 = papel, 3 = tijera): ";
  26.     cin >> eleccion;
  27.     cout << endl;
  28.  
  29.     --eleccion;
  30.  
  31.     if(eleccion == s)
  32.     {
  33.         cout << "Empate!" << endl;
  34.     }
  35.  
  36.     else if(eleccion == PIEDRA)
  37.     {
  38.         if(s == PAPEL)
  39.             cout << "Perdistes!" << endl;
  40.         else
  41.             cout << "Ganastes!" << endl;
  42.     }
  43.     else if(eleccion == PAPEL)
  44.         if(s == PIEDRA)
  45.             cout << "Ganastes!!" << endl;
  46.         else
  47.             cout << "Perdistes!!" << endl;
  48.     else
  49.         if(s == PIEDRA)
  50.             cout << "Perdistes!!!" << endl;
  51.         else
  52.             cout << "Ganastes!!!" << endl;
  53.  
  54.     cout << "¿Quieres jugar otra vez? (presiona s/S y enter si quieres seguir jugando o simplemente presiona enter si quiere salir) " << endl;
  55.     getline (cin, mas);
  56.  
  57.     if(mas=="s" || mas=="S")
  58.         continue;
  59.  
  60.     if(mas.empty())
  61.         break;
  62.  
  63.     } while(true);
  64.  
  65.     return 0;
  66. }
  #4 (permalink)  
Antiguo 26/04/2014, 14:02
Avatar de vangodp  
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 10 años, 6 meses
Puntos: 38
Respuesta: Deseo que cuando pulse enter a secas se finalice el programa

Código C++:
Ver original
  1. #include <iostream>
  2. #include <ctime>
  3. #include <cstdlib>
  4.  
  5. using namespace std;
  6.  
  7. int main() {
  8.  
  9.     string mas;
  10.    
  11.     do {
  12.    
  13.         srand ( time ( NULL ) );
  14.        
  15.         const char * ordenador[3] = { "piedra", "papel", "tijera" };
  16.         int s = rand() % 3;
  17.        
  18.         enum resultado_t { PIEDRA, PAPEL, TIJERA };
  19.        
  20.         cout << "Eleccion de la maquina: " << ordenador[s] << endl;
  21.        
  22.         int eleccion;
  23.        
  24.         cout << "Introduce n. jugada (1 = piedra, 2 = papel, 3 = tijera): ";
  25.         cin >> eleccion;
  26.         cout << endl;
  27.        
  28.         --eleccion;
  29.        
  30.         if ( eleccion == s ) {
  31.             cout << "Empate!" << endl;
  32.         }
  33.        
  34.         else
  35.             if ( eleccion == PIEDRA ) {
  36.                 if ( s == PAPEL ) {
  37.                     cout << "Perdistes!" << endl;
  38.                 } else {
  39.                     cout << "Ganastes!" << endl;
  40.                 }
  41.             } else
  42.                 if ( eleccion == PAPEL )
  43.                     if ( s == PIEDRA ) {
  44.                         cout << "Ganastes!!" << endl;
  45.                     } else {
  46.                         cout << "Perdistes!!" << endl;
  47.                     }
  48.                 else
  49.                     if ( s == PIEDRA ) {
  50.                         cout << "Perdistes!!!" << endl;
  51.                     } else {
  52.                         cout << "Ganastes!!!" << endl;
  53.                     }
  54.                    
  55.         cin.ignore ( 1, '\n' ); //Esto hace que se limpie el bufer por si tiene \n de antes ;)
  56.         cout << "¿Quieres jugar otra vez? (presiona s/S y enter si quieres seguir jugando o simplemente presiona enter si quiere salir) " << endl;
  57.         getline ( cin, mas );
  58.        
  59.         if ( mas == "s" || mas == "S" ) {
  60.             continue;
  61.         }
  62.        
  63.         if ( mas.empty() ) {
  64.             break;
  65.         }
  66.        
  67.     } while ( true );
  68.    
  69.     return 0;
  70. }

el problema viene de usar el operador >> que cuando pulsas enter '\n' pues ese mismo enter ya cuenta para finalizar el programa.
usando cin.ignore(1,'\n'); limpiamos este \n molesto y todo arreglado.

esa instrucion te va servir mucho tambien cuando uses cin antes de getline(). Recuerda que el problema es que cuando usas >> y pulsas enter va junto XDDD

la mecánica justa no te lo puedo explicar pero funciona muy bien.
Si quieres saber mas sobre cin.ignore() google es nuestro amigo XDD

Última edición por vangodp; 26/04/2014 a las 14:07
  #5 (permalink)  
Antiguo 26/04/2014, 14:12
 
Fecha de Ingreso: abril-2014
Mensajes: 4
Antigüedad: 10 años
Puntos: 0
Respuesta: Deseo que cuando pulse enter a secas se finalice el programa

vangodp el programa ahora funciona correctamente.

Muchas gracias por tu ayuda, se ve que pilotas

Un saludo!
  #6 (permalink)  
Antiguo 26/04/2014, 14:28
Avatar de vangodp  
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 10 años, 6 meses
Puntos: 38
Respuesta: Deseo que cuando pulse enter a secas se finalice el programa

Na, es que dando vueltas por los foros encuentras multitud de cosillas interesantes.
Se va guardando XDD

Etiquetas: enter, int, programa
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:36.