错误:控制可能达到非空函数的结束

时间:2014-09-04 15:36:13

标签: c function

当我尝试编译包含线性搜索功能声明的c文件时,这个错误出现在我身上

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

我的代码出了什么问题?请帮忙。

4 个答案:

答案 0 :(得分:2)

代码存在一些问题:

  1. 当参数n = negative number or 0
  2. 时,该方法的路径不会返回任何内容,如注释所示
  3. for-loop不执行任何操作,只执行一次并退出其中一个条件。它只能在第一个元素是搜索的元素时正常工作,在任何其他情况下只检查第一个元素并返回(没有正确的信息或不存在)。使用数组int values[] = { 1, 2, 3, 4, 5 };进行测试并搜索3,您的代码将找不到此值。
  4. 如果您要搜索特定值,则代码为:

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

答案 1 :(得分:1)

问题是传递给函数的参数是n <= 0。循环永远不会执行,函数完成后不返回任何值。

要解决此问题,请将if(n <= 0)语句放在for循环之前。

答案 2 :(得分:0)

如果&#39; for&#39;循环没有做任何你赢得的迭代,并且能够从函数中返回任何东西。也许添加像

这样的边缘情况
if(n <=0 )
    return false;
在循环之前

答案 3 :(得分: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);
   }