关于C#:如何检查arduino数组中是否包含元素?

How to check if element is included in array with arduino?

我有一个称为数字的数组,我想测试该数组中是否包含某个数字。

1
2
3
4
5
6
7
void loop(){
  if (arrayIncludeElement(numbers, mynumber)){
    // Do something
  } else {
    // Do something else
  }
}

我已经编写了arrayIncludeElement函数的一个版本,但是它似乎不起作用。

1
2
3
4
5
6
7
8
boolean arrayIncludeElement(array, element) {
  for (int i = 0; i < sizeof(array); i++) {
    if (array[i] == element) {
      return true;
    }
  }
  return false;
}

错误消息

  • 草图:5:错误:未在此范围中声明\\'array \\'
  • 草图:5:错误:未在此范围中声明\\'element \\'
  • 草图:5:错误:初始化器表达式列表被视为复合
    表达
  • 草图:3:错误:重新定义\\'boolean arrayIncludeElement \\'
  • 草图:5:错误:先前定义的\\'boolean arrayIncludeElement \\'
    这里
  • sketch.ino:在函数\\'void loop()\\'中:
  • 草图:11:错误:\\'arrayIncludeElement \\'不能用作函数
  • sketch.ino:在全球范围内:
  • 草图:16:错误:重新定义\\'boolean arrayIncludeElement \\'
  • 草图:5:错误:先前定义的\\'boolean arrayIncludeElement \\'
    这里
  • 草图:16:错误:此范围中未声明\\'array \\'
  • 草图:16:错误:未在此范围中声明\\'element \\'

编辑
我将功能更新为此。

1
2
3
4
5
6
7
8
9
boolean arrayIncludeElement(int array[], int element);
boolean arrayIncludeElement(int array[], int element) {
  for (int i = 0; i < (sizeof(array)/4); i++) {
    if (array[i] == element) {
      return true;
    }
  }
  return false;
}

但是现在我收到此错误

  • sketch.ino:在函数\\'void loop()\\'中:
  • 草图:8:错误:此范围中未声明\\'arrayIncludeElement \\'
  • 草图:10:错误:\\'} \\'标记之前的预期`; \\'

第8行是这个

1
if (arrayIncludeElement(numbers, 5){

第10行是这个

1
} else {


您没有提到该参数的数据类型。您必须提及论点。
然后,您必须声明函数原型。

1
2
3
4
5
6
7
8
9
 boolean arrayIncludeElement(int array[], int element);
 boolean arrayIncludeElement(int array[], int element) {
 for (int i = 0; i < max; i++) {
      if (array[i] == element) {
          return true;
      }
    }
  return false;
 }

编辑:就像Dmitri所说的那样,将数组中的元素编号作为函数参数传递。
不要使用sizeof。

然后必须在使用函数之前放置函数声明。因此在这里,函数原型在函数void loop()

之前


似乎这个问题越来越接近如何确定C语言中数组的大小?

但是,在通常情况下,您确实必须提供数组的长度或使用一些保护元素(例如以空字符结尾的字符串)。在调用链的某个地方,您必须知道数组的大小,不是吗?

一个小例子来说明为什么sizeof()可能不正确:

1
2
3
4
5
6
7
8
9
10
11
12
13
int size_test(char b[])
{
    char a[10];
    char foo[] = {'a', 'b', 'c', 'd', 'e'};
    char *bar = malloc(20);
    printf("sizeof a = %ld, sizeof b = %ld, sizeof foo = %ld, sizeof bar = %ld\
"
, sizeof(a), sizeof(b), sizeof(foo), sizeof(bar));
}
int main()
{
    char b[12];
    size_test(b);
}

在我的(64位)计算机上打印

sizeof a = 10, sizeof b = 8, sizeof foo = 5, sizeof bar = 8