#include <cs50.h>
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <stdlib.h>
#include <math.h>
int binary(int a[],int target,int l,int r); //return index , needs array, target left index, right index
//goal: find if the number is in the array
int main(void)
{
int a[]={1,2,3,4,5,6,7,8,9,10,11,12,13};
int target = get_int("number:");
int l = 0;
int r = 13;
int index=binary(a,target,l,r);
if(index>=0)
printf("number %i is at index %i\n",target,index);
else
printf("not found\n");
}
int binary(int a[],int target,int l,int r)
{
if(r<l)
{
return -1;
}
int mid=l+(r-l)/2;
if(a[mid]==target)
{
return mid;
}
if(a[mid]<target)
{
return binary(a,target,l+1,r);
}
if(a[mid]>target)
{
return binary(a,target,l,r-1);
}
}
已接收:非void函数在所有控制路径中均不返回值[-Werror,-Wreturn-type]
但是,我不明白为什么我收到此错误消息,即使我所有的 if 语句都有返回值。
然而,与答案相比,他们使用了 else if。我明白为什么他们是对的,但我不明白为什么我错了。
我不明白为什么我收到此错误消息,即使我所有的 if 语句都有返回值。
因为,虽然对你来说很明显这三个
if
条件之一必须为真,但编译器无法计算出来,并认为有可能不执行任何返回值的块,从而落下从函数的底部出来。