c++ - 为什么我的 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
解决方案
好的,会发生什么。此条件仅(可能)适用于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,这样我们就不会将时间浪费在其他可能的问题上。
推荐阅读
- python - 如何结束没有返回的python子进程?
- python - 在 Python/Pandas 中按字母显示 csv 文件迭代的进度
- python - 基于具有多列输入的函数创建布尔掩码
- spring-boot - 如何对具有 Mono 返回类型的方法进行 junit 测试
- python - Cache only a single step in sklearn's Pipeline
- vue.js - Vue 3 在 setup() 中渲染 vnodes 数组
- powerbi - 关于power bi中的内存模式工作逻辑
- sql-server - GitHub Action - 无法连接到 SQL Server
- c# - 如何在 C# 中的循环内执行 postasync 操作
- angular - 传单 js 上的错误