【问题标题】:How to check if element is included in array with arduino?如何使用arduino检查元素是否包含在数组中?
【发布时间】:2015-01-13 08:33:59
【问题描述】:

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

void loop(){
  if (arrayIncludeElement(numbers, mynumber)){
    // Do something
  } else {
    // Do something else
  }
}

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

boolean arrayIncludeElement(array, element) {
  for (int i = 0; i < sizeof(array); i++) {
    if (array[i] == element) {
      return true;
    }
  }
  return false;
}

错误消息

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

编辑 我将函数更新为此。

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()' 中:
  • sketch:8: 错误:'arrayIncludeElement' 未在此范围内声明
  • 草图:10:错误:预期的 `;'在“}”标记之前

第 8 行就是这个

if (arrayIncludeElement(numbers, 5){

第 10 行就是这个

} else {

【问题讨论】:

  • 你不应该为你的函数参数指定类型吗?
  • 另外,sizeof(array) 在您的函数中不起作用——您需要单独传递大小。
  • sizeof(array) 工作正常。问题显然是我错过了函数参数的数据类型。
  • 不,sizeof(array) 给出了指向int(或任何你的数组)的指针中的字节数。它提供了一些东西,但不是正确的东西。
  • 好的。但是我不知道我的数组的长度,有没有别的办法?

标签: c arrays arduino


【解决方案1】:

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

 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()之前的函数原型。

【讨论】:

  • @EmilBonneKristiansen 好的,没问题。
  • 请记住,在函数内部,array 看起来像一个指针——类型没有指定元素的数量。 sizeof(array) 将给出指针中的字节数,而不是整个数组中的字节数。他必须单独传递尺寸。
  • 我以为它工作了一会儿,但似乎有一个新的错误。
  • 好的,我的一个朋友成功了。我觉得我真的不习惯这种严格的编程。我将此答案标记为正确,谢谢大家。
【解决方案2】:

看来这个问题越来越接近How do I determine the size of my array in C?

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

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

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\n", 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-10-13
    • 2017-11-24
    • 2013-02-20
    • 1970-01-01
    • 2013-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多