在 Arduino 中计算数组的总和

问题描述

我正在尝试编写一些代码,将 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

它永远不会停止。

解决方法

在您的代码中:

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