if 和 else if 有什么区别

问题描述 投票:0回答:1
#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。我明白为什么他们是对的,但我不明白为什么我错了。

c cs50
1个回答
0
投票

我不明白为什么我收到此错误消息,即使我所有的 if 语句都有返回值。

因为,虽然对你来说很明显这三个

if
条件之一必须为真,但编译器无法计算出来,并认为有可能不执行任何返回值的块,从而落下从函数的底部出来。

© www.soinside.com 2019 - 2024. All rights reserved.