2013-07-29 71 views
0

我有一個程序當前正在讀取單詞中的一個變量* char wordlist [lengthOfArray];所以基本上它保留字符[10]。我可以計算出平均Word成功的長度,但我有我想打印比這個平均遞歸打印時間長於C計劃中的平均單詞

void printAverage(char *wordlist, int n, int average){ 
if (n > 0){ 
    if (strlen(wordlist[0]) > average){ 
     printf("%s\n", wordlist[0]); // Print the one longer than average then move on 
     printAverage(wordlist + 1, n-1, average); 
     } 
     else { 
      printAverage(wordlist+1, n-1, average); 
      } 
    } 
} 

我已經看過了網上看到什麼是錯的時間越長字的方法,但由於某些原因,比較 if(strlen(a [0])> average)沒有正確地獲取我的單詞的值,並且給我錯誤 傳遞strlen的arg 1使得來自Integer的指針沒有投射。

有沒有人有任何想法我能如何正確地做到這一點?預先感謝任何幫助,我只是卡住了,我已經嘗試了很多東西無濟於事。

+2

哪裏是 「一」,宣佈? – LogicG8

+0

啊對不起,一個實際上是wordlist –

+0

只是修正了:) –

回答

0

您正在將wordlist聲明爲指向char的指針,而不是指向指向char的指針。 char是一個整數類型,所以當你將其解引用爲wordlist [0]並將其傳遞給strlen()時,編譯器會警告你傳遞一個整型而不是指針。

嘗試:

void printAverage(char **wordlist, int n, int average) 
{ 
    if (n > 0){ 
    if (strlen(wordlist[0]) > average){ 
     printf("%s\n", wordlist[0]); // Print the one longer than average then move on 
    } 
    printAverage(wordlist + 1, n-1, average); 
    } 
} 
+0

只是給了它一個旋轉,悲傷地說[警告]從不兼容的指針類型傳遞'printAverage'的arg 1。我正在從你在說的東西中學習:) –

+0

@KadinBoyle PrintAverage的哪一個調用是這麼說的? –

+0

@JimBalter只是它的方法,因爲它甚至被稱爲 –

1

您的變量wordlist不是一組單詞 - 它是一個字符串。如果你有話數組它要麼像這樣的二維數組:

char *wordlist[] 

或者這樣:

char wordlist[][10] 

或雙指針這樣的:

char **wordlist 

您需要根據您傳遞給它的實際數據設置參數。

+0

好的謝謝你的幫助,但我已經宣佈了wordlist,正如你所說的char * wordlist []。我是否也需要將它作爲* wordlist []傳遞? –

+0

@KadinBoyle這是一個奇怪的問題。當然這些類型必須匹配。你在wordlist [0]上做strlen和printf(「%s」),當然它必須是char *,而wordlist本身必須是一個指向char *的指針(聲明爲char * wordlist []'與將它聲明爲'char ** wordlist'相同)。傳遞的參數只是'wordlist'。 –

+0

@KadinBoyle如果你的函數外部的'wordlist'被聲明爲'char * wordlist [10]',那麼當你調用函數時,你只需將它作爲'wordlist'傳遞。 – paddy