c - 带有嵌套 if 语句的 While 循环 - C

标签 c syntax robot

我正在尝试为 iRobot 编程的项目。对于这个项目,我有一个部分需要这个机器人直线运行,除非按下碰撞传感器。当按下不同的碰撞传感器时,应该会发生不同的事情,然后它应该继续直线移动。这是我到目前为止的代码:

while( ReadBumpSensors() == 0) 
{
    drive(200, RAD_STRAIGHT);

    if ( ReadBumpSensors() == 1 )
        {
        drive(-200, RAD_STRAIGHT);
        delayMs(1000);
        drive(200, 1);
        delayMs(500);
        drive(200, RAD_STRAIGHT);
        }
    if ( ReadBumpSensors() == 2)
        {
        drive(-200, RAD_STRAIGHT);
        delayMs(1000);
        drive(200,-1);
        delayMs(500);
        drive(200, RAD_STRAIGHT);
        }
    if ( ReadBumpSensors() == 3)
        {
        drive(-200, RAD_STRAIGHT);
        delayMs(1000);
        drive(200,-1);
        delayMs(500);
        drive(200, RAD_STRAIGHT);
        }
    }

我没有收到任何错误,但机器人只是直线移动,没有响应任何 if 语句。我觉得这是某种语法错误,但我不确定。有什么建议吗?

最佳答案

while 循环的条件是 ReadBumpSensors() == 0,所以与 if 语句相关的 block 不会被执行,除非ReadBumpSensors() 的返回值在 whileif 的条件评估之间发生变化。

也许你想做这样的事情:

for(;;) /* infinite loop */
{
    switch (ReadBumpSensors())
    {
    case 0:
        drive(200, RAD_STRAIGHT);
        break;
    case 1:
        drive(-200, RAD_STRAIGHT);
        delayMs(1000);
        drive(200, 1);
        delayMs(500);
        drive(200, RAD_STRAIGHT);
        break;
    case 2:
        drive(-200, RAD_STRAIGHT);
        delayMs(1000);
        drive(200,-1);
        delayMs(500);
        drive(200, RAD_STRAIGHT);
        break;
    case 3:
        drive(-200, RAD_STRAIGHT);
        delayMs(1000);
        drive(200,-1);
        delayMs(500);
        drive(200, RAD_STRAIGHT);
        break;
    }
}

更新:案例2和案例3的程序是一样的,所以你可以这样合并它们。

for(;;) /* infinite loop */
{
    switch (ReadBumpSensors())
    {
    case 0:
        drive(200, RAD_STRAIGHT);
        break;
    case 1:
        drive(-200, RAD_STRAIGHT);
        delayMs(1000);
        drive(200, 1);
        delayMs(500);
        drive(200, RAD_STRAIGHT);
        break;
    case 2:
    case 3:
        drive(-200, RAD_STRAIGHT);
        delayMs(1000);
        drive(200,-1);
        delayMs(500);
        drive(200, RAD_STRAIGHT);
        break;
    }
}

关于c - 带有嵌套 if 语句的 While 循环 - C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33613001/

相关文章:

c - 将入口点更改为PE文件中新添加的shellcode段后,如何恢复主进程?

c++ - 冒号是什么意思(:) operator in "uint isWidget : 1;" in Qt?

matlab - 在 Simulink 中为步行机器人的地板/地面建模

ios - ios程序可以控制现实生活中的机器吗?

c - 将两个大于 255 的数字相乘

c - fork()后谁先执行 : parent or the child?

C 中的字符打印

java - Java 中缺少属性语法

syntax - 当 foo 被声明为可变时,要求 &mut foo 而不是 &foo 的原因是什么?

azure - UiPath 应用程序部署和迁移到另一个租户