问题描述
我正在尝试编写一些代码,将 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);
}