c++变量在每次循环迭代期间被覆盖

c++ Variable being overwritten during each loop iteration

本文关键字:覆盖 迭代 循环 变量 c++      更新时间:2023-10-16

我正在开发模拟软件,该软件要求实体在其功能的某些方面有一些预先确定的行为。我目前正在研究的行为是将模拟环境中的实体设置为围绕用户确定的点以"螺旋"方式移动。

用户可以通过从GUI中选择特定选项来为实体设置几种现有的行为选择。我打算实现这种新行为的方式如下:

  • 获取从实体的当前位置到缓和曲线原点(用户指定的实体将绕其进行缓和曲线旋转的点)的角度
  • 检查图元与缓和曲线原点的当前距离:
  • 如果距离原点大于一定距离,则直接向原点移动,直到距离原点一定距离,然后开始螺旋上升
  • 如果它距离原点小于一定距离,请远离原点,直到它距离原点一定距离,然后开始螺旋上升
  • 每当实体完成螺旋线的回路时,GUI中显示的显示已完成回路数的值都应更新

我已经开始编写一个循环来实现这种行为,我打算通过在循环的每次迭代中检查实体与原点的角度来增加完成的电路数量——每次该角度与螺旋行为发生时的角度相同时,我就会知道另一个电路已经完成。但是,由于我在循环开始时得到实体和原点之间的角度,该值将随着循环的每次迭代而更新,这意味着实体将永远不会从原点达到该角度,因为角度将不断变化。

我想知道的是,是否有一种方法可以在循环的第一次迭代中设置变量的值,然后在循环的任何其他迭代中不再更改该值?我是否可以将该值分配给全局变量,并使其成为"绝对"值,这样即使我再次尝试更改其值,也无法更改?

编辑

显而易见的建议是在循环之外设置角度变量值,但我不能这样做,因为已经实现的现有行为的性质,以及当用户选择其中一种行为时会发生什么。

听起来你应该在循环外进行循环的第一次迭代来设置这个一次性变量,然后在循环内进行n-1迭代。如果循环体很复杂,请将其放入函数中。还要记住,如果你碰巧使用浮点值作为角度,那么在第一次迭代后,它们相等的可能性微乎其微。

int loop_body(params)
{
    // Do stuff.
    return first_iteration_value;
}
int initial_value = loop_body(params);
for(init; condition; incr)
{
    loop_body(params);
}