C++ If/Else语句返回

C++ If/Else语句返回,c++,linked-list,return,C++,Linked List,Return,这段代码不断抛出错误,“并非所有控制路径都返回值”。我不完全确定如何重写它以便修复错误。除了返回,这就是我需要这段代码做的。我是否应该创建一个在if/else语句中声明的新变量,然后在结束括号之前返回该变量 node * LList::search(int srchKey) { node * p = head; while (p != NULL) { if (p->key == srchKey) { retur

这段代码不断抛出错误,“并非所有控制路径都返回值”。我不完全确定如何重写它以便修复错误。除了返回,这就是我需要这段代码做的。我是否应该创建一个在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;
    }
}

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

return NULL;
你应该把它修好。
编辑:同样,你的循环只会通过一次。我将删除(如果p==NULL)块;这是无用的。我明白您的意图,但是实现它的方法就是我上面描述的方法。

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

return NULL;
你应该把它修好。
编辑:同样,你的循环只会通过一次。我将删除(如果p==NULL)块;这是无用的。我明白你的意图,但实现它的方法就是我上面所描述的。

条件为
false
时,你就没有
返回

之外添加一个
返回
,以防未进入循环


而且,
p=p->nextif else
,在到达循环之前退出循环,因此将永远不会执行code>


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

条件为
false
时,您就没有
return

之外添加一个
返回
,以防未进入循环


而且,
p=p->nextif else
,在到达循环之前退出循环,因此将永远不会执行code>


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

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

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

这与我在中描述的问题类似

您应该等到循环结束后再执行
返回NULL。如果你到了那里,就意味着被搜索的物品真的没有找到

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

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

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

这与我在中描述的问题类似

您应该等到循环结束后再执行
返回NULL。如果你到了那里,就意味着被搜索的物品真的没有找到

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

想一想:如果循环从未进入会怎样?而且,我看不到什么时候
p=p->next将永远不会运行。这应该会给出死代码警告。
p=p->next将永远不会执行。执行
if
else
块,两个块都从函数返回,从而结束循环。感谢您这样解释,@Carcigenicate@Barmar也感谢您指出这一点。我们的教授在PowerPoint幻灯片中举了一个例子,我和这个很相似。因此,只要存在if/else,另一个语句就没用了?一般来说不是。只有在这种情况下,因为它们都是从函数返回的?而且,我看不到什么时候
p=p->next将永远不会运行。这应该会给出死代码警告。
p=p->next将永远不会执行。执行
if
else
块,两个块都从函数返回,从而结束循环。感谢您这样解释,@Carcigenicate@Barmar也感谢您指出这一点。我们的教授在PowerPoint幻灯片中举了一个例子,我和这个很相似。因此,只要存在if/else,另一个语句就没用了?一般来说不是。只有在这种情况下,因为它们都是从函数返回的。这是一个解决他的警告的完美答案,但如果您添加一点关于他如何只能进行一次循环迭代的内容,可能会更好!顺便说一句,你可以建议编辑,如果你看到这样的东西。省去了我自己动手的麻烦!:)在我的代表处,如果我进行编辑,它会立即通过。因此,特别是对于这样大的事情,根据我的经验,在评论中提出建议通常效果更好:)这是一个完美的回答,解决了他的警告,但如果您添加一点关于他如何只能进行一次循环迭代的内容,可能会更好!顺便说一句,你可以建议编辑,如果你看到这样的东西。省去了我自己动手的麻烦!:)在我的代表处,如果我进行编辑,它会立即通过。因此,特别是对于这样大的事情,根据我的经验,在评论中建议通常效果更好:)