I cannot figure out why this error is happening: error: control may reach end of non-void function
Here is the code:
bool search(int val
That compiler warning is not correct. Anyway, there is a bigger problem with your code:
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.
} // !
}
}
This code only checks values[0] == value
and then always returns. It's happening because of that else {return false;}
.
You should write it this way:
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;
}
Now, function checks entire values
array and then returns false
if there was no matches. But if it found a match, it will instantly return true
witout checking other elements.
Also, compiler will not emit a warning for this code.
Your code is equivalent to
return (n > 0 && values [0] == value);
Either you are in the habit of writing very simple things in an excessively complicated way, or that code doesn't do what you want it to do.
Some folks will probably hate this, but....
bool search(int value, int values[], int n) {
if (n < 1) {
return false;
}
bool ret = false;
for (int i = 0; i < n; i++) {
if (values[i] == value) {
ret = true;
break;
}
}
return ret;
}
You are getting this error because if your for
loop breaks due to breaking condition i < n;
then it don't find any return
statement after for
loop (see the below, I mentioned in code as comment).
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
}
If for
loop break due to i >= n
then control comes to the position where I commented and there is no return
statement present. Hence you are getting an error "reach end of non-void function in C".
Additionally, remove break
after return
statement. if return
executes then break never get chance to execute and break loop.
return true; -- it returns from here.
break; -- " remove it it can't executes after return "
Check your compiler should give you a warning - 'unreachable code'.