我到处搜索,不确定为什么7号阵列适用于6个索引,但6个不会。
#include <iostream>
using namespace std;
int main() {
double rainRate[6];
double averageRainfall = 0.0;
for (unsigned int i = 0; i <= 6; i++) {
cout << "Enter rainfall rate for day: " << i << endl;
cin >> rainRate[i];
if ((rainRate[i]) >= 6.0) {
cout << "Rainfall rate is High" << endl;
} else if (rainRate[i] < 6.0 && rainRate[i] > 3.0) {
cout << "Rainfall rate is Medium" << endl;
} else if (rainRate[i] <= 3.0) {
cout << "Rainfall rate is Low" << endl;
}
averageRainfall += rainRate[i];
}
cout << "The average rainfall rate for this week is: " << endl;
cout << (averageRainfall / (double) 7);
return 0;
}
当将数组的大小更改为7并将值分配给6个索引时,这将无问题地运行,但如果使用数组的确切大小,则会导致分段错误。
答案 0 :(得分:2)
由于double rainRate[6];
的大小为6,但您的代码尝试访问7个项目:[0]
,[1]
,[2]
,[3]
,{{ 1}},[4]
,[5]
。
如果您有一个[6]
元素数组,则有效索引为n
- 0
。在您的情况下n-1
- 0
。
解决方案:将5
替换为i <= 6
。
答案 1 :(得分:1)
您不使用数组的确切大小。 rainRate
有6个元素,索引为0,1,2,3,4和5.
使用i < 6
而不是i <= 6
进行修复,或者将数组的大小增加1。
最后,考虑使用size_t
作为数组索引类型。使用unsigned
可以让你在将来遇到麻烦,因为它的最大大小可能小到65535,并且数组现在可以包含比这个数量更多的元素。有些人提倡使用ptrdiff_t
(因为这会支持负面索引),但我是使用size_t
的。