簡體   English   中英

錯誤:控件可能到達非空函數的結尾

[英]error: control may reach end of non-void function

當我嘗試編譯包含線性搜索功能的聲明的ac文件時,此錯誤出現在我的身上

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;
    }
  }
}

我的代碼有什么問題? 請幫忙。

代碼存在一些問題:

  1. 當參數n = negative number or 0時,該方法的路徑不返回任何內容(如注釋所示)
  2. for循環不執行任何操作,只會執行一次並退出其中一種情況。 只有在第一個元素是搜索到的元素時,它才能正常工作,在任何其他情況下,僅檢查第一個元素並返回(不存在當前的正確信息)。 用數組int values[] = { 1, 2, 3, 4, 5 };測試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;
}

問題在於傳遞給函數的參數n為n <= 0 循環從不執行,並且函數在不返回任何值的情況下完成。

要解決此問題,請將if(n <= 0)語句放在for循環之前。

如果“ for”循環沒有執行任何迭代,則您將無法從該函數返回任何內容。 也許添加一個邊緣案例

if(n <=0 )
    return false;

在循環之前。

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

由於在for循環之外沒有任何指令,因此該函數返回到調用方。 由於在這種情況下該函數沒有返回(布爾)值,因此發生error

通過遵循Mahonri編寫可維護C代碼的規則列表中的規則 #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);
   }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM