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.

Necesito ayuda sobre cómo hacer un bucle dentro de un caso que está dentro de un bucle do-while.

Estoy tratando de hacer un bucle while (true) dentro de un caso con un bucle do-while, pero cuando pongo el while (true) en el caso, el menú no vuelve a la consola y necesito cerrar el depurador y ejecutarlo nuevamente. ¿Puede alguien ayudarme? Soy nuevo en c++.

Aquí está mi código:

do
{
    std::cout << "[0] Salir\n"; // Esta es la Opción 0 del Menú
    std::cout << "[1] Salud Infinita\n"; // Esta es la Opción 1 del Menú
    std::cout << "[2] Munición Infinita\n"; // Esta es la Opción 2 del Menú
    std::cout << "[3] Rondas Infinitas\n"; // Esta es la Opción 3 del Menú
    std::cin >> choice;

    switch (choice) // Esto es para detectar la opción que seleccionó el usuario
    {
    case 0:
        std::cout << "¿Por qué me abriste si no me vas a usar? :(\n";
        return 0;

    case 1:
        std::cout << "¡Has activado la Salud Infinita!\n";

        while (true)
        {
            int health = 1000;
            WriteProcessMemory(phandle, (LPVOID*)(healthPtrAddr), &health, 4, 0);
        }
        break;
    case 2:
        std::cout << "¡Has activado la Munición Infinita en el Arma Principal!\n";

        while (true)
        {
            int ammo = 500;
            WriteProcessMemory(phandle, (LPVOID*)(ammoPtrAddr), &ammo, 4, 0);
        }
        break;
    case 3:
        std::cout << "¡Has activado las Rondas Infinitas en el Arma Principal!\n";

        while (true)
        {
            int rounds = 200;
            WriteProcessMemory(phandle, (LPVOID*)(roundsPtrAddr), &rounds, 4, 0);
        }
        break;
    }
} 
while (choice != 0);
Tags:  ,

Answer

  1. Avatar for davy.ai

    El problema con el código es que el bucle infinito while dentro del switch case está haciendo que el programa se bloquee y se vuelva irresponsivo. Para solucionar este problema, puedes modificar la condición del bucle para verificar una variable que se establece en true cuando el usuario quiere salir del bucle.

    Aquí tienes una versión actualizada del código:

    bool exitLoop = false;
    
    do
    {
        std::cout << "[0] Salir\n"; // Esta es la Opción 0 del Menú
        std::cout << "[1] Salud Infinita\n"; // Esta es la Opción 1 del Menú
        std::cout << "[2] Munición Infinita\n"; // Esta es la Opción 2 del Menú
        std::cout << "[3] Rondas Infinitas\n"; // Esta es la Opción 3 del Menú
        std::cin >> choice;
    
        switch (choice) // Esto es para detectar la opción que seleccionó el usuario
        {
        case 0:
            std::cout << "¿Por qué me abriste si no vas a usarme? :(\n";
            exitLoop = true;
            break;
    
        case 1:
            std::cout << "¡Has activado la Salud Infinita!\n";
            while (!exitLoop)
            {
                int health = 1000;
                WriteProcessMemory(phandle, (LPVOID*)(healthPtrAddr), &health, 4, 0);
                // establecer exitLoop en true cuando el usuario quiera salir
            }
            break;
    
        case 2:
            std::cout << "¡Has activado la Munición Infinita en Arma Primaria!\n";
            while (!exitLoop)
            {
                int ammo = 500;
                WriteProcessMemory(phandle, (LPVOID*)(ammoPtrAddr), &ammo, 4, 0);
                // establecer exitLoop en true cuando el usuario quiera salir
            }
            break;
    
        case 3:
            std::cout << "¡Has activado las Rondas Infinitas en Arma Primaria!";
            while (!exitLoop)
            {
                int rounds = 200;
                WriteProcessMemory(phandle, (LPVOID*)(roundsPtrAddr), &rounds, 4, 0);
                // establecer exitLoop en true cuando el usuario quiera salir
            }
            break;
        }
    
    } while (!exitLoop);
    

    Al establecer exitLoop en true cuando el usuario selecciona la opción 0, el programa saldrá del bucle y terminará. De lo contrario, el bucle seguirá ejecutándose hasta que el usuario seleccione la opción 0 para salir.

Comments are closed.