两种方式遍历INT数组
|
以两种方式遍历INT数组是一个机器人有趣的代码(用C语言编写)。
我有一个这样的职位数组:
int pos[] = {0, 45, 90, 135, 180, 135, 90, 45};
这些位置用于移动伺服电机。
45 90 135
\\ | /
\\ | /
\\ | /
0 ----------- 180
在主菜单ѭ2中,我检查到障碍物的距离,如果距离为ѭ3,则我的伺服必须旋转到下一个步骤(下一个数组位置),直到找到自由路径(> xx Cm
)为止。
我的主要方法很简单:
int main (int argc, const char * argv[]) { for (;;) find(); }
而我的核心功能(查找)是这样的:
void find() {
for ( i=0; i<sizeof(pos); i++ ) // Traversing position array
{
distance = rand() % 7; // Simulate obstacle distance
move( pos[i] ); // Simulate movements
if (i==sizeof(pos)) { i=1; } // Try to reset the \"i\" counter. PROBLEM!
if ( distance<=5 ) continue; // Is there an obstacle?
sleep(2); // Debug sleep
find(); // Similar recursion
}
}
我不知道这段代码有什么问题,但是我需要移动伺服直到没有障碍。
例:
在位置90
,我发现一个障碍。我想从左到右循环数组,反之亦然,每一步都控制距离。如果我找不到高速公路,way8ѭ,否则print(\"ok\")
。
如何解决此代码以使其正常工作?
没有找到相关结果
已邀请:
5 个回复
糕泰灌
除了递归,还有一个while循环,仅当距离大于5时才退出。 \'pos \'数组的末尾(-1)有一个前哨。这是一个无效的角度,可用于查找数组的末端。无需计算元素数量。 左右,左右移动来自使用\'direction \'变量。很容易检测\'pos \'数组的开始(i == 0)或结尾(pos [i + 1] == -1),这时我们反转了方向。 也无需在180度后重复角度。我们得到的顺序是: 0 45 90 135 180 135 90 45 0 45 90 ... 我们甚至可以减少一行代码。
干杯, 约翰
部窖空
而不是
。数组的大小不是其元素的数量,而是它在内存中占用的总字节数。
得到
。如果
是4个字节,则循环32次而不是8次。 另外,由于
语句的条件将
限制为
,因此
在循环体内永远不会成立。
坝胺绣敝
魄龟呸筹
然后使用
进行迭代:正如其他人指出的那样,使用
可能行不通。 同样,C语言中的数组基于0:元素变为0、1、2、3,... n-1。 因此,您需要说:
慷祈霖黑
循环而不是
循环。在没有障碍物的情况下增加该值,在发现障碍物时中断该值:
这将随机选择位置,直到遇到障碍物为止,并且也无需重置它,因为在遇到障碍物时循环会自动中断。