2017-10-20 69 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