我无法弄清楚为什么会发生这种错误: error: control may reach end of non-void function
这是代码:
bool search(int value, int values[], int n) {
if (n < 1) {
return false;
}
for (int i = 0; i < n; i++) {
if (values[i] == value) {
return true;
break;
}
else {
return false;
}
}
}
Run Code Online (Sandbox Code Playgroud)
我理解错误意味着函数可能在没有返回任何内容的情况下到达终点,但我无法弄清楚这可能会发生什么.
你得到这个错误,因为如果你的for循环由于破坏条件而中断,i < n;那么它return在for循环之后就找不到任何语句(参见下面的代码中我提到的注释).
for (int i = 0; i < n; i++){
if (values[i] == value){
return true;
break;
}
else{
return false;
}
}
// here you should add either return true or false
}
Run Code Online (Sandbox Code Playgroud)
如果for由于i >= n当时控制导致的循环中断到达我评论的位置并且没有return声明存在.因此,您将收到一个错误"在C中达到非空函数的结尾".
此外,删除break后return声明.如果return执行则break永远不会有机会执行并打破循环.
return true; -- it returns from here.
break; -- " remove it it can't executes after return "
Run Code Online (Sandbox Code Playgroud)
检查你的编译器应该给你一个警告 - "无法访问的代码".
该编译器警告不正确。无论如何,您的代码存在更大的问题:
bool search(int value, int values[], int n) {
if (n < 1) {
return false;
}
for (int i = 0; i < n; i++) {
if (values[i] == value) {
return true;
break;
}
else { // !
return false; // ! <-- Here is the mistake.
} // !
}
}
Run Code Online (Sandbox Code Playgroud)
此代码仅检查values[0] == value然后始终返回。正因为如此else {return false;}。
你应该这样写:
bool search(int value, int values[], int n) {
if (n < 1) {
return false;
}
for (int i = 0; i < n; i++) {
if (values[i] == value) {
return true;
// break; <- BTW, it's redundant.
}
}
return false;
}
Run Code Online (Sandbox Code Playgroud)
现在,函数检查整个values数组,false如果没有匹配项,则返回。但是如果找到匹配项,它会立即返回true而不检查其他元素。
此外,编译器不会为此代码发出警告。