首页 > 解决方案 > 为什么我的 for 循环没有在函数中递增?

问题描述

我正在编写一个程序来获取光标位置并将其存储在int x[]x 坐标和int y[]y 坐标中。

但是,当我将数组传递给一个带有 for 循环的函数时,该循环应该将鼠标的坐标设置为存储在数组中的坐标,通过每个元素递增,for 循环似乎不会递增 i。

void click(clock_t &st, int x[], int y[]);

int x[] = { 0, 0, 0, 0, 0, 0, 0 };
int y[] = { 0, 0, 0, 0, 0, 0, 0 };

int amtToggled = 0; //Controlled by hotkeys utilizing GetAsyncKeyState.

if (GetAsyncKeyState(VK_F1) && !inMenu)
{
    GetCursorPos(&n);

    x[0] = n.x;
    y[0] = n.y;

    uWindow = true;
    Sleep(150);
}

void click(clock_t &st, int x[], int y[])
{
    for (int i = 0; i < amtToggled; i++)
    {
        float te = clock() - st;
        if ((te / CLOCKS_PER_SEC) >= (aDelay / 1000))
        {
            LOG(i);
            SetCursorPos(x[i], y[i]);
            mouse_event(MOUSEEVENTF_LEFTDOWN, q, z, 0, 0);
            Sleep(50);
            mouse_event(MOUSEEVENTF_LEFTUP, q, z, 0, 0);
            Sleep(50);
            st = clock();
        }
    }
}

for 循环应该“迭代”数组并将鼠标位置设置为存储在数组的每个 x 和 y 对应元素中的坐标,每次迭代都会增加元素位置。相反,我只是保持 0。

编辑#1:完整来源:https ://pastebin.com/HdaaBbKm

标签: c++

解决方案


好的,会发生什么。此条件仅(可能)适用于i = 0

if ((te / CLOCKS_PER_SEC) >= (aDelay / 1000))

为什么?当你完成与i = 0你一起工作时更新st。在下一次迭代中,您计算te = clock() - st​​ . 但是计算机速度非常快,因此te很可能为零(或一些小的数字,例如 1)。最后 fori > 0 te / CLOCKS_PER_SEC远小于1.02,因此您永远不会进入其他变量的主体。

由于您可能只想使用 pause 迭代位置aDelay / 1000,因此只需使用Sleep(aDelay)而不是if.

将来,发布MVCE,这样我们就不会将时间浪费在其他可能的问题上。


推荐阅读