提问者:小点点

控件到达非空函数的末尾(C++)


我有一个经过修改的二分搜索函数,它在一个向量中找到最小值(最接近L的值--一个已知值)和最大值(最接近R的值--相同的已知值)。不幸的是,当我试图编译代码时,我得到了这个警告,我不知道为什么:控制到达非空函数的末端。

int bs_counts (vector <int> Arr, int x, int low, int high, bool searchDirection)
 {
     bool done = false;
     int new_middle = 0;
      int mid = (low + high)/2;
     
     while(low <= high && done == true)
     {
         if(Arr[mid] == x)
         {
             new_middle = mid;
             done = true;
         }
         else if(Arr[mid] > x)
         {
             high = mid - 1;
         }
         else
         {
             low = mid + 1;
         }
     }
        if(done == true)
        {
            return new_middle;
        }
        else
        {
            if(searchDirection == true)
            {
                return low;
            }
            else if (searchDirection == false)
            {
                return high;
            }
        }
 }

共1个答案

匿名用户

首先,请正确设置代码格式,因为看起来3个return语句在while循环中,而事实并非如此。

编译器迷茫了,看看这段代码。

if (done == true)
{
    return new_middle;
}
else
{
    if (searchDirection == true)
    {
        return low;
    }
    else if (searchDirection == false)
    {
        return high;
    }
}

我们可以明显地看到searchdirection将是truefalse,并且总会返回一些内容,但编译器可能忽略了这一点,请将其更改为如下所示。

if (done == true)
{
    return new_middle;
}
else
{
    if (searchDirection == true)
    {
        return low;
    }
    else
    {
        return high;
    }
}

警告也消失了。

相关问题


MySQL Query : SELECT * FROM v9_ask_question WHERE 1=1 AND question regexp '(控件|到达|非|空|函数|末尾|c++)' ORDER BY qid DESC LIMIT 20
MySQL Error : Got error 'repetition-operator operand invalid' from regexp
MySQL Errno : 1139
Message : Got error 'repetition-operator operand invalid' from regexp
Need Help?