C 二进制搜索中的错误输出

C 二进制搜索中的错误输出,c,function,sorting,binary-search,C,Function,Sorting,Binary Search,我使用二进制搜索算法在预定义数组中查找一个数字,但是如果我在数组中输入值,我会得到正确的答案,但是在输入一个值而不是像101100121这样的数组时,我只会得到数字10作为输出 #include <stdio.h> int binarysearch(int A[],int key); int main() { int key,answer; int A[10]={0,5,8,10,12,14,15,18,19,21}; scanf("%d",&

我使用二进制搜索算法在预定义数组中查找一个数字,但是如果我在数组中输入值,我会得到正确的答案,但是在输入一个值而不是像101100121这样的数组时,我只会得到数字10作为输出

#include <stdio.h>

int binarysearch(int A[],int key);

 int main()
 {
    int key,answer;
    int A[10]={0,5,8,10,12,14,15,18,19,21};
    scanf("%d",&key);
    answer=binarysearch(A,key);
    if (answer!=-1)
    {
        printf("%d",answer);
    }
    else
    {
        puts("NOT FOUND");
    }
}

int binarysearch(int A[],int key)
{
    int i;
    int h,l,m;
    h=10;
    l=0;

    while(l<=h)
    {
        m=(h+l)/2;
        if(A[m]==key)
        {
            return m;
        }
        else if(key<A[m])
             {
                 h=m-1;
             }
             else
             {
               l=m+1;
             }
    }
    return -1;
}
#包括
int二进制搜索(int A[],int键);
int main()
{
int键,答案;
int A[10]={0,5,8,10,12,14,15,18,19,21};
scanf(“%d”和键)(&key);
答案=二进制搜索(A,键);
如果(回答!=-1)
{
printf(“%d”,答案);
}
其他的
{
看跌期权(“未找到”);
}
}
int二进制搜索(int A[],int键)
{
int i;
int h,l,m;
h=10;
l=0;
而(l改变病情

while(l<=h)

请格式化您的代码,它是无法理解的。请使用
h=9
而不是
h=10
,因为数组元素从
0
n-1
。即使没有更改,您的代码对我也有效。@gauravsehgal它对范围内的数字有效,但对范围以上的数字无效。什么数字对您无效?我检查过了再一次。对于
101
,我得到了
未找到的
。我错在哪里?
while ( l < h )
    else if(key<A[m])
         {
             h=m-1;
         }
    else if(key<A[m])
         {
             h = m;
         }
int binarysearch( const int A[], int n, int key )
{
    int l = 0;
    int h = n;

    while ( l < h )
    {
        int m = ( h + l ) / 2;

        if ( A[m] == key )
        {
            return m;
        }
        else if( key < A[m] )
        {
            h = m;
        }
        else
        {
            l = m + 1;
        }
    }

    return -1;
}
answer=binarysearch( A, 10, key );