2017-10-20 87 views
-7
#include <iostream> 
using namespace std; 

int main() { 
    int scores [9] = { 100, 80, 60, 75, 95, 65, 85, 40, 70 }; 
    int total = 0; 
    for (int i = 0; sizeof(scores); i++) { 
     total += scores[i]; 
    } 
    double average = (double) total/sizeof(scores); 
    cout << average << endl; 
    cin.get(); 
    return 0; 
} 

错误消息:在TestProject.exe中0x002918F5引发异常:0xC0000005:访问冲突读取位置0x003A0000。Noob C++人:为什么我的数组不工作?

这段代码有问题,但找不到它。只是试图从Java中学习C++中的数组。谢谢。

+1

'的sizeof(得分)'是以字节为单位的阵列的长度。一个'int'使用多个字节。你需要除以sizeof(int)或sizeof(scores [0])或sizeof(* scores)'来获得元素的数量,无论哪一个漂浮在你的船上。 –

+0

请注意,您可以使用基于范围的for循环来循环普通数组:'for(auto s:scores)total + = s;'。 – juanchopanza

回答

2

sizeof(array)不返回数组中元素的数量,而是返回字节数。它可以通过执行sizeof(array)/sizeof(array[0])来获得元素的数量(更多关于How do sizeof(arr)/sizeof(arr[0]) work? 的内容)

另外,xyious是正确的,你需要在for循环中提供一个实际的条件,所以你最终会与

for (int i = 0; i < sizeof(scores)/sizeof(scores[0]); i++) { 
1

你应该使用std :: vector不是数组。 Bjarne Stroustrup在他的书中大多数情况下推荐使用std :: vectors。

std::vector

Arrays vs Vectors: Introductory Similarities and Differences

+1

他确实如此,但不要打折'std :: array',因为它填充了几个用例,你知道大小不会改变。它还有一个符合Asker需求的便捷的“尺寸”方法。 – user4581301

+1

不要打折普通数组。 '(int s:scores)total + = s;'它完全没问题。 – juanchopanza

相关问题