Ver Mensaje Individual
  #4 (permalink)  
Antiguo 26/04/2014, 14:02
Avatar de vangodp
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