2014-09-04 40 views
-1

似乎我這個錯誤的結束,當我試圖編譯其中包含一個線性搜索功能錯誤:控制可以達到非void函數

bool search(int value, int values[], int n) 
{ 
// TODO: implement a searching algorithm 
    for(int d = 0;d<n;d++){ 
    if(n<0){ 
    return false; 
    } 
    else if(values[d]==value){ 
     return true; 
    } 
    else{ 
     return false; 
    } 
    } 
} 

什麼是錯我的代碼的聲明的C文件?請幫忙。

+0

看到我的回答,他們是代碼中的一些其他問題。 – NetVipeC 2014-09-04 15:55:29

回答

2

的代碼一些問題:

  1. 的方法已經不返回任何東西,作爲評論的路徑,當參數n = negative number or 0
  2. for循環沒有做任何事情,只會執行一次和退出的條件之一。只有當第一個元素是被搜索的元素時,它纔會正常工作,在任何其他情況下只檢查第一個元素並返回(沒有存在或不存在的正確信息)。使用數組int values[] = { 1, 2, 3, 4, 5 };進行測試並搜索3,您的代碼將找不到此值。

如果您正在搜索一個特定值的代碼是:

bool search(int value, int values[], int n) { 
    for (int d = 0; d < n; d++) { 
     if (values[d] == value) { 
      return true; 
     } 
    } 
    return false; 
} 
+0

如果我有其他條件做另一個循環? – user297904 2014-09-04 16:08:04

+0

'if-else'會總是執行兩個分支中的一個,並且您的代碼會在兩個分支中返回,在這種情況下,您總是會在循環的第一次執行中返回該函數(某些編譯器會警告此問題,鏗鏘)。 – NetVipeC 2014-09-04 16:10:43

+0

非常感謝:D。 – user297904 2014-09-04 16:13:23

1

問題是傳遞給函數的參數n是n <= 0。循環從不執行,函數完成而不返回任何值。

要修復它,請在for循環之前放置if(n <= 0)語句。

+0

所以我應該改變如果條件是(n <= 0){...} ??? – user297904 2014-09-04 15:40:33

+0

@ user297904是的。固定。 – Igor 2014-09-04 15:43:37

+0

好的,謝謝它的工作原理:D – user297904 2014-09-04 15:44:40

0

如果'for'循環沒有做任何迭代,你將無法從函數中返回任何東西。也許增加一個邊緣案例,如

if(n <=0) 
    return false; 

之前的循環。

0

dfor循環遞增,直到它等於n值。此時,執行for循環以外的代碼。

由於沒有超出for循環的指令,函數返回給調用者。發生error是因爲在這種情況下沒有從函數返回的(布爾值)值。

錯誤可以通過遵循Mahonri List Of Rules For Writing Maintainable C Code的規則#1來避免。例如:

bool search(int value, int values[], int n) 
    { 
    bool rCode=false; 

    // TODO: implement a searching algorithm 
    for(int d = 0;d<n;d++) 
     { 
     if(n<0) 
     { 
     goto CLEANUP; 
     } 
    else if(values[d]==value) 
     { 
     rCode=true; 
     goto CLEANUP; 
     } 
    else 
     { 
     goto CLEANUP; 
     } 
    } 

CLEANUP: 

    return(rCode); 
    } 
相關問題