如果/ Else语句返回

时间:2018-04-26 23:53:15

标签: c++ linked-list return

这部分代码不断抛出错误,"并非所有控制路径都返回值"。我不完全确定如何重写这个,以便我可以修复错误。除了返回之外,这就是我需要这部分代码来做的事情。我应该创建一个我在if / else语句中声明的新变量,然后在结束括号之前返回该变量吗?

node * LList::search(int srchKey)
{
    node * p = head;
    while (p != NULL)
    {
        if (p->key == srchKey)
        {
            return p;
        }
        else
        {
            return NULL;
        }
        p = p->next;
    }
}

3 个答案:

答案 0 :(得分:3)

如果head为NULL,search()将退出而不会到达任何return语句。返回值将是不确定的。这就是编译器所抱怨的。

如果head不为NULL,search()将只检查第一个节点,然后检查return一个值,它将不会搜索整个列表。因此,return NULL;语句根本不应该在循环内。它会在遇到不匹配的元素时立即退出search(),而不是继续到列表中的下一个元素。

这类似于我在Searching array reports "not found" even though it's found中描述的问题。

在执行return NULL;之前,您应该等到循环结束。如果你到达那里,就意味着找不到正在搜索的项目。

node * LList::search(int srchKey)
{
    node * p = head;
    while (p != NULL)
    {
        if (p->key == srchKey)
        {
            return p;
        }
        p = p->next;
    }
    return NULL;
}

答案 1 :(得分:1)

在while循环之后需要另一个return语句。一种可能的代码路径是程序永远不会进入while循环。一个简单的

return NULL;

应该修复它。 编辑:此外,你的循环只会进行一次通过。我会删除(如果p == NULL)块;它没用。我看到你的意图,但实现它的方式就是我上面描述的方式。

答案 2 :(得分:1)

while条件为false时,您没有return

如果您没有进入循环,请在return之外添加while

此外,p = p->next;将永远不会被执行,因为您在到达之前因为if-else而退出循环。

关于逻辑,在我看来,你根本不需要else部分。尝试省略它并在例程结束前放置return NULL