Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/146.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在实现二进制搜索时,控件在非void函数末尾到达时发出警告_C++_Binary Search - Fatal编程技术网

C++ 在实现二进制搜索时,控件在非void函数末尾到达时发出警告

C++ 在实现二进制搜索时,控件在非void函数末尾到达时发出警告,c++,binary-search,C++,Binary Search,这是我的二进制搜索的实现。虽然答案是正确的,但当我编译代码时,会收到一条警告:“控件到达非void函数的末尾”。为什么我会犯这个错误?如何纠正? 提前谢谢 #include <iostream> using namespace std; int binary1(int myarray[7], int target) { int low=1, high=sizeof(myarray); while(low<=high) { int mi

这是我的二进制搜索的实现。虽然答案是正确的,但当我编译代码时,会收到一条警告:“控件到达非void函数的末尾”。为什么我会犯这个错误?如何纠正? 提前谢谢

#include <iostream>
using namespace std;

int binary1(int myarray[7], int target) 
{
    int low=1, high=sizeof(myarray);
    while(low<=high)
    {
        int mid=low+(high-low)/2;
        if(myarray[mid]==target)
            return mid;
        else if(myarray[mid]<target)
            low=mid+1;
        else
            high=mid-1;
    }
}

int main()
{
    int a[7] ={3,7,12,44,53,76,98};
    int value = binary1(a,53);
    cout<<value<<endl;
    return 0;
}
#包括
使用名称空间std;
int-binary1(int-myarray[7],int-target)
{
int low=1,high=sizeof(myarray);

而(low编译器不能肯定地知道
low编译器不能肯定地知道
low如果函数被传递了一个容器中不存在的值,它将到达函数的末尾。深入了解函数调用的深度以及如何返回值(供初学者检查)超出了这个问题的范围,但是我们可以说行为依赖于实现。
当我用这些参数({3,7,12,44,53,76,98},1)调用函数时,代码在ideone上返回0

您应该返回一个值,以防在容器中实际存在元素时无法找到该值。-1应该可以

我会这样写函数:

int binary1(int myarray[7], int target) 
{
    int low=1, high=sizeof(myarray);
    int idx = -1;
    while(low<=high)
    {
        int mid=low+(high-low)/2;
        if(myarray[mid]==target){
            idx = mid;
            break;  // answer already found.
          }
        else if(myarray[mid]<target)
            low=mid+1;
        else
            high=mid-1;
    }
  return idx;
}
int-binary1(int-myarray[7],int-target)
{
int low=1,high=sizeof(myarray);
intidx=-1;

而(low如果函数被传递了一个容器中不存在的值,那么它将到达函数的末尾。深入研究函数调用的深度以及如何返回值(对于初学者检查)超出了这个问题的范围,但是我们可以说行为取决于实现。 当我用这些参数({3,7,12,44,53,76,98},1)调用函数时,代码在ideone上返回0

您应该返回一个值,以防在容器中实际存在元素时无法找到该值。-1应该可以

我会这样写函数:

int binary1(int myarray[7], int target) 
{
    int low=1, high=sizeof(myarray);
    int idx = -1;
    while(low<=high)
    {
        int mid=low+(high-low)/2;
        if(myarray[mid]==target){
            idx = mid;
            break;  // answer already found.
          }
        else if(myarray[mid]<target)
            low=mid+1;
        else
            high=mid-1;
    }
  return idx;
}
int-binary1(int-myarray[7],int-target)
{
int low=1,high=sizeof(myarray);
intidx=-1;

while(low)我现在如何克服这个问题?在
while
循环结束后,在函数末尾返回一些内容。在您的情况下,-1可能是一个表示“未找到项”的好值。谢谢。这非常有帮助。我现在如何克服这个问题?在
while
循环结束后,在函数末尾返回一些内容。在您的情况下,-1可能是一个指示“未找到项”的好值。谢谢。这非常有帮助。