Error: control may reach end of non-void function in C
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'.
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.