C++ If/Else语句返回
这段代码不断抛出错误,“并非所有控制路径都返回值”。我不完全确定如何重写它以便修复错误。除了返回,这就是我需要这段代码做的。我是否应该创建一个在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
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->next由于if else
,在到达循环之前退出循环,因此将永远不会执行code>
关于逻辑,在我看来,您根本不需要else
部分。尝试忽略它,并在例程结束之前放置return NULL
。当而条件为false
时,您就没有return
在之外添加一个返回
,以防未进入循环
而且,p=p->next由于if 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,另一个语句就没用了?一般来说不是。只有在这种情况下,因为它们都是从函数返回的。这是一个解决他的警告的完美答案,但如果您添加一点关于他如何只能进行一次循环迭代的内容,可能会更好!顺便说一句,你可以建议编辑,如果你看到这样的东西。省去了我自己动手的麻烦!:)在我的代表处,如果我进行编辑,它会立即通过。因此,特别是对于这样大的事情,根据我的经验,在评论中提出建议通常效果更好:)这是一个完美的回答,解决了他的警告,但如果您添加一点关于他如何只能进行一次循环迭代的内容,可能会更好!顺便说一句,你可以建议编辑,如果你看到这样的东西。省去了我自己动手的麻烦!:)在我的代表处,如果我进行编辑,它会立即通过。因此,特别是对于这样大的事情,根据我的经验,在评论中建议通常效果更好:)