2016-11-19 35 views
-1

我試圖將字符串數組的位置作爲int數組的參數傳遞,並且我得到了無效的間接符作爲錯誤。我想計算我隨機生成並抓到的小精靈的頻率。我做了一些相當多的研究,但仍然無法理解它的概念。附:我的講師正在教C的過時版本,以便介紹printf(s)。將字符數組轉換爲值並將其放入C中的int數組中

int encounter() { 
    //list of pokemons 
    char pokemon[5][10] = {"Magikarp", "Zubat", "Eevee", "Magmar", "Pikachu"}; 
    int type[5] = {0,0,0,0,0}; 
    int i; 
    int a=0; 
    //random number generator from 0 - 4 
    srand(time(NULL)); 
    i = (rand() % 5); 

    //prints out the pokemon name 
    printf("A wild %s appeared! \n", pokemon[i]); 

    type[pokemon[i]] += 1; 

    for(a=0; a<6; a++) { 
    printf(type[a]); 
    } 
    return 0; 
} 
+1

「***我的講師教的C過時的版本,所以介意的printf(S)。***」 是什麼意思呢? –

+2

您使用的C版本不能過時:您正在使用內聯註釋,直到C99時纔會使用內置註釋。 – yellowantphil

+0

間接問題在這裏是'type [pokemon [i]] + = 1;'。用簡單的'type [i] + = 1;'替換那個代碼,因爲pokemon [i]是一個char數組。 –

回答

1

線:

type[pokemon[i]] += 1; 

不正確。

pokemon[i]有型號char*;即它是一個指針,不應該用來索引type數組。我想你的意思是用i索引type數組。它應該是

type[i] += 1; 

此外,打印類型的循環是錯誤的。它迭代6次,但type數組只有5個元素(包括0..4)。最後,printf功能想要的格式字符串作爲第一個參數(它已經開始的時間),所以它應該是:

for(a = 0; a < 5; a++) { 
    printf("%d\n", type[a]); 
} 
+0

我不知道pokemon [i]是一個指針,謝謝澄清。 –

1

三兩件事:

  1. 隨着type[pokemon[i]] += 1;你行試圖傳遞一個字符串作爲數組的索引。你應該做的是type[i]
  2. for(a=0; a<6; a++)因爲type有五個元素,而不是六個,所以會出界。
  3. printf(type[a])無效C; printf只能通過指定整數的有效格式字符串打印整數。嘗試printf("%d\n", type[a]);
+0

感謝您的幫助!我的問題已解決。 –

-1

在你的例子中i代表生成的pockemon索引。如果它是隨機產生的,即其值爲3,則它指的是稱爲「Magmar」的痘痘(pockemon[3])。類型數組包含捕獲的小寵物的數量,所以它必須由pockemon索引本身索引,而不是通過字符串數組的位置,這是沒有意義的。

正確type[pokemon[i]] += 1;type[[i]] += 1;

+0

雙括號? – pat

相關問題