2017-03-04 5 views
0

まず、私はこの記事の馬鹿みたいに見えると申し訳ありませんが、私は完全にCに新しいです。とにかく、私の問題は私がこの奇妙なエラーをYTのチュートリアルと私はホッケーで最高のプレーヤーを計算するプログラムを作ろうとしています。プレーヤーのIDの配列にどれくらいのゴールがあり、どれくらい多くのゴールをプレイしたのか、各プレーヤーはゲームでゴールを分けます。最後に、私は最高のスコアとプレイヤーIDをプリントアウトし、私はエラーを取得するいくつかの理由で、ここに私のコードです:サブスクリプションの値は配列でもポインタでもありません

#include <stdio.h> 
#include <stdlib.h> 

int main() 
{ 
    int i; 
    int players[5] = {5, 3, 4, 2, 1}; 
    int goals = {3, 2, 5, 4, 5}; 
    int gamesPlayed = {1, 1, 3, 2, 2}; 
    float ppg[5]; 
    float bestPPG = 0.0; 
    int bestPlayer; 

    for (i=0; i<5; i++) 
    { 
     ppg[i] = (float)goals[i]/(float)gamesPlayed[i]; 
     if (ppg[i] > bestPPG) 
     { 
      bestPlayer = players[i]; 
      bestPPG = ppg[i]; 
     } 
    } 

    printf("The best player was %d", bestPlayer); 

    return 0; 
} 

出力:コンパイラの出力を想定し

line: 16 
error: subscripted value is neither array nor pointer nor vector 

答えて

4

出力(実行時ではなく)は、エラーを通知します。問題は、整数を宣言したが、配列として使用しようとしたことでした。エラーは「添え字付きの値は配列でもポインタでもベクトルでもない」と述べています。 添え字は、[]演算子で変数にアクセスすることを意味します。これはC言語では配列、ポインタ、またはC++の[]をオーバーロードするクラスやクラスに対してのみ実行できます。したがって

int goals = {3, 2, 5, 4, 5}; 

int goals[] = {3, 2, 5, 4, 5}; 

int gamesPlayed = {1, 1, 3, 2, 2}; 

は、その補正後

int gamesPlayed[] = {1, 1, 3, 2, 2}; 

でなければならなければならない、私は結果を得る:

最高の選手OPのコードで5つの

+0

これらの行はエラーでました - エラーがOPは、コンパイラの設定を変更する必要があり、その後見られない場合。 –

+0

私はOPが実際に言及した出力がcompulerエラーであることを理解しました。私はそれを反映するために私の答えを更新しました。 – reindeer

+0

私は 'int goals = {3、2、5、4、5};を知っています;は間違っていて意味がありませんが、未定義の動作ですか?そうでない場合、「ゴール」は「3」であることが保証されていますか? –

関連する問題