2017-04-07 42 views
1

首先:我剛剛開始使用C編程(我的第一種編程語言),這可能是一個愚蠢/簡單的問題,但我試圖實現一個函數,該函數返回數組/列表中索引處的值。我總是從編譯器中得到這個錯誤:「錯誤:編譯器到達非void函數結束」,即使我返回的是int類型的值。在此先感謝:C - 在索引處的返回值:控制達到非void函數的末尾

int list_get(int list[], int length, int index) { 
    if(index <= CAPACITY){ 
    for(int i = 0; i <= CAPACITY; i++){ 
     if(i == index) 
      return list[i]; 
    } 
    } 
    else{ 
    printf("Index is out of range. \n"); 
    return 0; 
    } 
} 
+3

在for循環之後需要'return 0;'。 – BLUEPIXY

+0

或者不使用'if if(0 <= index && index BLUEPIXY

+0

'list [i]'我以前的評論錯字爲'list [index]' – BLUEPIXY

回答

3

編譯器看到,無論是return陳述是某種條件塊的,所以它會試圖向您發出警告。沒有錯,正如這樣。

考慮流量,

  • index <= CAPACITY是真實的,
  • 爲沒有重複的,i == index是真實的。
  • for循環退出。

在這種情況下,沒有什麼要返回....

避免的,只要將return 0;聲明出來else塊。注意可能的副作用,如果i == index檢查失敗,它將返回0.

0

對於初學者來說,函數沒有意義。功能中不使用參數length。也不需要包含檢查該索引小於或等於魔術值CAPACITY的循環。

編譯器,因爲它是無法確定,這種情況

if(i == index) 

將永遠如此規定,這種情況下

if(index <= CAPACITY){ 

也是如此發出一條消息。

此外它不清楚如何區分索引中數組中的有效值0。

0

你的else語句超出了for循環.so當你的for循環退出時,它執行else語句並且你寫了「return 0」。所以它不會返回任何值。

相關問題