控制可能会达到非空函数的末尾 - 返回类型

时间:2016-03-22 16:44:39

标签: c search boolean

我正在尝试创建一个简短的线性搜索算法,但不断收到错误消息控件可能会达到非空函数结束-wreturn-type 。我知道错误与在循环之外放置返回有关,但是如何从循环中获取返回值呢?

以下是代码:

bool search(int value, int values[], int n)
{
    for(int i=0; i<values[n]; i++)
    {
        if (values[i] == value)
        {
            printf("%i was found.", value);
            return true;
        }
        else if (values[i] != value)
        {
            printf("%i was not found.", value);
            return false;
        }
        else if (value <= 0)
        {
            printf("%i is not a positive number.", value);
            return false;
        }
        else
            return false;
    }
}

1 个答案:

答案 0 :(得分:4)

在函数开始时0<values[n]为假的情况将导致循环永远不会被迭代,因此控制到达终点。

简单的解决方案是将return false;添加到函数的末尾。

在我看来,无论价值如何,循环只会有一次迭代,所以我不认为代码能够做到你想要的。这就是我认为你的意图。查看循环之外的代码如何在搜索之前进行评估,然后在搜索之后找不到任何内容。从问题中可以清楚地看到,您需要更多地了解代码的控制流程以及返回语句的作用。

bool search(int value, int values[], int n)
{
    if (value <= 0)
    {
        printf("%i is not a positive number.", value);
        return false;
    }

    for(int i=0; i<n; i++)
    {
        if (values[i] == value)
        {
            printf("%i was found.", value);
            return true;
        }
    }

    printf("%i was not found.", value);
    return false;
}