【问题标题】:Calculate a sum of an array in Arduino在Arduino中计算数组的总和
【发布时间】:2021-03-16 20:08:06
【问题描述】:

我正在尝试编写一些代码,将 5 个整数存储在一个数组中,然后计算 5 个存储值的总和。然后打印出 5 个值以及总和。

我试过这个:

const int sizeOFarray = 5;
int b[sizeOFarray] = {10, 20, 30, 40, 50};
int sum = 0;

void setup ()
{
  Serial.begin(9600);
}
void loop ()
{
  // sum of array b
  for ( int i = 0; i < sizeOFarray; i++ )
    sum += b[ i ];
  Serial.print('Sum of total elements of an array:') ;
  Serial.print(sum) ;
}

但它给了我一个奇怪的输出:

720031034735031034750031034765031034780031034795031034810031034825031034840031034855031034870031034885031034900031034915031034930031034945031034960031034975031034990031034100503103

它永远不会停止。

【问题讨论】:

  • 你知道函数loop无限循环吗?另请注意,'Sum ... array:'multicharacter literal 类型的 int,而不是 c 风格的字符串。
  • 你有什么建议吗?我就是想不通
  • 使用双引号表示字符串。 :-)
  • 打印总和后换行。

标签: c++ arduino arduino-uno arduino-c++


【解决方案1】:

在您的代码中:

const int sizeOFarray = 5;
int b[sizeOFarray] = {10, 20, 30, 40, 50};


int sum = 0;   // you initialize sum once.

void setup ()
{
  Serial.begin(9600);
}
void loop ()
{
  // on the first pass sum == 0, no problem.
  // on the second pass, sum still holds the sum of values in the array.
  // to which you'll add again, creating the 'runaway' effect.   

  // sum of array b
  for ( int i = 0; i < sizeOFarray; i++ )
    sum += b[ i ];

  // After the first pass, sum hold the correct value, that is good.

  Serial.print('Sum of total elements of an array:') ;
  Serial.print(sum) ;
}

解决此问题的一个简单方法是将变量 sum 的声明和初始化移到 loop() 中,在打印输出中添加换行符也会有所帮助,如下所示:

void loop ()
{
  int sum = 0; 
  // sum of array b
  for ( int i = 0; i < sizeOFarray; i++ )
    sum += b[ i ];

  Serial.print('Sum of total elements of an array:') ;
  Serial.println(sum) ;  // print sum and a newline. 
}

这应该会产生这个输出:

Sum of total elements of an array:150
Sum of total elements of an array:150
Sum of total elements of an array:150
Sum of total elements of an array:150
Sum of total elements of an array:150
Sum of total elements of an array:150

注意:您可以通过取消变量 SizeOfArray 来节省一些 RAM 空间...

int b[] = {10, 20, 30, 40, 50};

void setup ()
{
    Serial.begin(9600);
}    

void loop()
{
    int sum = 0;
    for (int i = 0; i < sizeof(b) / sizeof(b[0]); ++i)
        sum += b[i];

    Serial.print("sum: "); 
    Serial.println(sum);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-08-05
    • 2018-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-21
    • 2020-09-07
    • 2012-07-23
    相关资源
    最近更新 更多