pseudocode :
function takes "int c" and "list d"
from start to end of the list search "c" in "list d"
when see it
return index
由于在迭代中写入返回,编译器开始抱怨非void函数。 如何减少编译器投诉?
注意:c始终在列表中,但其索引不可知。
编辑:如果我改变如下;
pseudocode :
function takes "string name" and "list d"
from start to end of the list search "c" in "list d"
when see it
return object
我该怎么办?
答案 0 :(得分:5)
发布实际代码确实会有所帮助。我猜你有类似的东西:
int find(int c, list d) {
for (*iterate over list*) {
if (item == c)
return index;
}
// <- nothing here
}
在大多数情况下,编译器无法知道列表将始终包含c
。所以你需要添加一个return语句。这样的事情很平常:
int find(int c, list d) {
for (*iterate over list*) {
if (item == c)
return index;
}
// Never reached
return -1; // or throw an exception
}
(或选择其他无效索引值)。请留下详细评论,说明为什么永远不会达到该部分。
如果您已经使用它们,那么抛出异常可能是一个好主意 - 如果您对列表的假设始终包含c
失败,则会发现错误。
答案 1 :(得分:2)
你做不到。在循环之后放置“假”返回并发表评论,如:
// This never should happen.
return -1;
如果没有找到,你也可以考虑抛出异常...... 但问题是编译器投诉,所以你必须在那里返回。
答案 2 :(得分:2)
你可以这样做
int index = -1
search in list
if found
break;
return index;
答案 3 :(得分:0)
编译器指出你,如果“c”不在“list d”中,你的程序会导致未指定的行为。如果找不到“c”,请确定你的函数应该返回什么,然后返回,并且编译器将停止抱怨。如果你真的绝对确定“c”在列表中,那么你返回的并不重要。但如果这是真的,那就是代码味道。