内部变量的范围'如果'内部声明' for循环'在一个函数内部

时间:2015-04-04 21:59:43

标签: c# global-variables nested-loops local-variables

我正在Atmel Studio 6.2中对我的机器人进行编程,我正在编写一个函数来返回白色表面上黑线的位置,我的机器人可以使用8个模拟光传感器检测到该位置。我已经彻底研究了C#中变量的范围,但是,我无法弄清楚我在下面这段非常简单的代码中做错了什么或误解了。调用下面的函数时,

这有效:

char linePosDigital(int threshold)
{   
    char linePos = 0;

    if(analog_read(0) < threshold) linePos += pow(2, 0);
    if(analog_read(1) < threshold) linePos += pow(2, 1);
    if(analog_read(2) < threshold) linePos += pow(2, 2);
    if(analog_read(3) < threshold) linePos += pow(2, 3);
    if(analog_read(4) < threshold) linePos += pow(2, 4);
    if(analog_read(5) < threshold) linePos += pow(2, 5);
    if(analog_read(6) < threshold) linePos += pow(2, 6);
    if(analog_read(7) < threshold) linePos += pow(2, 7);

    return linePos;
}

这不起作用:

char linePosDigital(int threshold)
{   
    char linePos = 0;

    for(int i=0; i<8; i++)
    {
        if(analog_read(i) < threshold) linePos += pow(2, i);
    }

    return linePos;
}

我需要使各种功能与上面的功能有些类似,我需要能够使用for循环。经过几个小时的研究后,我仍然不知道为什么第二个提到的功能不起作用。

非常需要帮助和赞赏! (:

编辑:这是我的新MWE(您需要更改打印和延迟命令以及删除库,对不起)。 linePosDigital1输出正确答案,而linePosDigital2输出错误答案:

#include <pololu/orangutan.h>

char linePosDigital1(int n[8], int threshold)
{   
    char linePos = 0;

    if(n[0] < threshold) linePos += pow(2, 0);
    if(n[1] < threshold) linePos += pow(2, 1);
    if(n[2] < threshold) linePos += pow(2, 2);
    if(n[3] < threshold) linePos += pow(2, 3);
    if(n[4] < threshold) linePos += pow(2, 4);
    if(n[5] < threshold) linePos += pow(2, 5);
    if(n[6] < threshold) linePos += pow(2, 6);
    if(n[7] < threshold) linePos += pow(2, 7);

    return linePos;
}

char linePosDigital2(int n[8], int threshold)
{
    char linePos = 0;

    for(int i=0; i<8; i++)
    {
        if(n[i] < threshold) linePos += pow(2, i);
    }

    return linePos;
}

int main()
{
    int n[8];

    n[0] = 800;
    n[1] = 800;
    n[2] = 800;
    n[3] = 800;
    n[4] = 800;
    n[5] = 800;
    n[6] = 200;
    n[7] = 200;

    while(1)
    {
        clear();
        print_binary(linePosDigital1(n, 650));
        delay(1000);
        clear();
        print_binary(linePosDigital2(n, 650));
        delay(1000);
    }
}

n是一个静态数字,在这种情况下代表来自我的传感器的实际输入。

1 个答案:

答案 0 :(得分:0)

大家好,我终于解决了这个问题。我创建了一个函数来确定p ^ q并用内置函数pow()代替它。这解决了这个问题,所以我觉得pow()函数出了问题 - 我仍然觉得非常奇怪,特别是因为它是C(++)的一部分,我想?无论如何:非常感谢你的帮助和耐心! :)