es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Por qué mi bucle no se reinicia en la primera iteración? C++

Estoy haciendo un juego de dados en C++. Me preguntaba por qué no reinicia el bucle. El juego es al mejor de 3. Se supone que debe reiniciar el bucle siempre que el jugador quiera seguir jugando. Sin embargo, solo reinicia el bucle una vez. La segunda vez que presiono “Y” o sí en este caso, simplemente sale del programa.

He intentado poner el reinicio en un bucle while anidado, pero tampoco parece funcionar.

reinicio:

mientras ((pWin!=2) && (cWin!=2)) {
pDice1 = rand() % 6 + 1;
cDice1 = rand() % 6 + 1;

cout << "La puntuación del jugador es: " << pDice1 << endl;
cout << "La puntuación de la computadora es: " << cDice1 << endl;

if (cDice1 > pDice1) {
    cout << "¡La computadora gana!" << endl << endl;
    cWin++; 

} if (pDice1 > cDice1) {
    cout << "¡El jugador gana!" << endl << endl;
    pWin++; 
} if (pDice1 == cDice1) {
    cout << "¡Es un empate!" << endl << endl;
} if (pWin > cWin) {
    cout << "¡El jugador gana esta ronda! ¿Desea seguir jugando?" << endl;
    cin >> Y;
    if (Y == 'y') {
        goto reinicio; 
    } else {
        exit(0); 
    }
}if (cWin > pWin) {
    cout << "¡La computadora gana esta ronda! ¿Desea seguir jugando?" << endl;
    cin >> Y;
    if (Y == 'y') {
        goto reinicio; 
    } else {
        exit(0); 
    }
}

}

Tags:  ,

Answer

  1. Avatar for davy.ai

    Parece que el problema está con la instrucción goto. Las instrucciones goto generalmente se consideran una mala práctica y pueden provocar un comportamiento inesperado. En lugar de usar goto, deberías usar un bucle while para reiniciar el juego.

    while (true) {
        // Código del juego
        cout << "¿Deseas seguir jugando?" << endl;
        cin >> Y;
        if (Y == 'y') {
            continue;
        } else {
            break;
        }
    }
    

Comments are closed.