当前位置:  开发笔记 > 人工智能 > 正文

while循环使用嵌套的if语句--C

如何解决《while循环使用嵌套的if语句--C》经验,为你挑选了1个好方法。

我正在尝试一个项目来编程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语句.我觉得这是某种类型的语法错误,但我不确定.有什么建议?



1> MikeCAT..:

你的while循环条件是ReadBumpSensors() == 0,所以与if语句相关的块将不会被执行,而不是在ReadBumpSensors()while和的条件评估之间的变化的返回值if.

也许你想做这样的事情:

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;
    }
}

推荐阅读
Life一切安好
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有