2017-10-20 9 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++ person:なぜ私の配列は機能しませんか?

このコードに問題がありますが、見つかりません。ちょうどJavaから移ってC + +で配列を学ぶことを試みる。ありがとう。

+1

'のはsizeof(スコア)は'バイトの配列の長さです。 'int'は1バイト以上を使用します。要素の数を取得するには、sizeof(int)またはsizeof(score [0])またはsizeof(* score)で分割する必要があります。 –

+0

ループの範囲に基づいてプレーンな配列をループすることができます: '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 not arraysを使用する必要があります。 Bjarne Stroustrupは、彼の著書の大半のケースでstd :: vectorsを推奨しています。

std::vector

Arrays vs Vectors: Introductory Similarities and Differences

+1

彼はそうですが、 'std :: array'を値引きしないのは、サイズが変更されないことが分かっているいくつかのユースケースを埋めているからです。また、Askerのニーズを満たす便利な「サイズ」メソッドも用意されています。 – user4581301

+1

プレーン・アレイをディスカウントしないでください。 'for(int s:score)total + = s;'それはまあまあです。 – juanchopanza

関連する問題