我需要有关如何在它位于 do-while 循环内的情况下创建循环的帮助

Posted

技术标签:

【中文标题】我需要有关如何在它位于 do-while 循环内的情况下创建循环的帮助【英文标题】:I need help on how to make a loop inside a case that it is inside a do-while loop 【发布时间】:2022-01-23 22:52:04 【问题描述】:

我正在尝试在一个带有 do-while 循环的案例中创建一个 while (true) 循环,但是当我将 while (true) 放在案例中时,菜单不会循环回控制台,我需要关闭调试器并再次运行它可以帮助我我是 C++ 新手。

这是我的代码:

do

    std::cout << "[0] Quit\n"; // This is Option 0 of the Menu
    std::cout << "[1] Infinite Health\n"; // This is Option 1 of the Menu
    std::cout << "[2] Infinite Ammo\n"; // This is Option 2 of the Menu
    std::cout << "[3] Infinite Rounds\n"; // This is Option 3 of the Menu
    std::cin >> choice;


    switch (choice) // This is to detect the Choice the User selected
    
    case 0:
        std::cout << "Why did you even open me to not use me :(\n";
        return 0;

    case 1:
        std::cout << "You Have Activated Infinite Health!\n";
        
        while (true)
        
            int health = 1000;
            WriteProcessMemory(phandle, (LPVOID*)(healthPtrAddr), &health, 4, 0);
        
        break;
    case 2:
        std::cout << "You Have Activated Infinite Ammo On Primary Weapon!\n";

        while (true)
        
            int ammo = 500;
            WriteProcessMemory(phandle, (LPVOID*)(ammoPtrAddr), &ammo, 4, 0);
        
        break;
    case 3:
        std::cout << "You Have Activated Infinite Rounds On Primary Weapon!";

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

【问题讨论】:

while (true) 永远不会完成,而且你没有做任何事情来打破它。你为什么要在这里使用它? 如何完成 while (true)?我正在用它来写内存,我可以删除中断但它没有做任何事情 while(true) 的意义何在?你想达到什么目的? 我正在尝试创建一个循环,例如,弹药始终为 100,但是当我单击该选项时,它显示无限弹药已激活,但它不会返回菜单 我认为大部分内容应该由 C++ 教程来解释。在任何情况下,如果您首先提取 minimal reproducible example 并将其和输出包含在您的问题中,以及您如何与程序交互的确切信息,将会有所帮助。作为新用户,请拨打tour阅读How to Ask。 【参考方案1】:

是的,它不会返回,因为它阻塞了程序。

要解决您的问题,您可以将循环放在另一个线程中。

如果您使用以下方法包含线程库:

#include <thread>

然后您必须定义应该运行的函数:

void keepHealth() 
    while (true)
    
        int health = 1000;
        WriteProcessMemory(phandle, (LPVOID*)(healthPtrAddr), &health, 4, 0);
    

您现在可以在另一个线程中执行此函数:

std::thread task1(keepHealth);

如果你想传递你的句柄之类的参数,你必须将它们写在函数头中:

void keepHealth(void* pHandle, void* healthPtrAddress) 
    while (true)
    
        int health = 1000;
        WriteProcessMemory(phandle, (LPVOID*)(healthPtrAddr), &health, 4, 0);
    

并像这样传递它们:

std::thread task1(keepHealth, pHandle, healthPtrAddress);

【讨论】:

我不明白你在说什么,就像我说我是 C++ 新手抱歉:) 好的,正在运行的进程将被 while-true 循环阻塞。那是因为您的 cpu 被困在其中并且无法执行进一步的指令,因为它一次运行一条指令。但是如果告诉 cpu 使用不同的内核,它将能够同时运行这些指令。我过度简化了这个,我建议你阅读更多关于这个主题 非常感谢! 你让它工作了吗? 是的,我做到了!谢谢

以上是关于我需要有关如何在它位于 do-while 循环内的情况下创建循环的帮助的主要内容,如果未能解决你的问题,请参考以下文章

do-while与while的区别?

do-while语句和while的区别

java循环语句while与do-while

如何在 Java 中的每个 do-while 循环实例上存储数据?

Java do-while循环简单问题

我怎样才能退出 do-while 循环?