2017-03-04 50 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}; 

即修正後,我得到的結果是:

最好的球員是5

+0

在OP的這些代碼行是錯誤的 - 如果看到沒有錯誤,則OP需要改變編譯器設置。 –

+0

我明白,OP提到的輸出實際上是計算機錯誤。我更新了我的答案以反映這一點。 – reindeer

+0

我知道'詮釋目標= {3,2,5,4,5};'是錯誤的,是沒有意義的,但它是不確定的行爲?如果不是,「目標」保證是「3」嗎? –

相關問題