# Thread: Functions and loops assignment problem

1. ## Functions and loops assignment problem

I have to write a function which returns 1 if n is a perfect number and 0 otherwise. A perfect number is that which when all it's factors besides it's self is added up equals itself. For e.g. the factors of 6 are 1, 2, 3 and 6. 1+2+3 = 6, therefore it's a perfect number.

I've rewritten the code several times, and I split one task to the main function and the other to the isPerfect function, I get a control reaches non void error, and I can't figure out what's wrong with the function, the curly brackets seem to be ok, but they obviously are not.

Code:
```//Write a function isPerfect(int n) which returns 1 if n is a perfect number and 0 otherwise.

#include <stdio.h>

#define PERFECT 1
#define NOT_PERFECT 0

int isPerfect (int n);

int main (int argc, char **argv) {

int n, i;//n is number being tested

n = 1;
while (n <= 10000){

i = isPerfect ( n );
printf ("\n&#37;d is a perfect number", n);

n++;
}
return (0);
}

int isPerfect(int n) {

int k = 1;//factor numbers to be tested
int sum = 0;//summing up the factors
int test;//testing if the final summation is equal to the number being tested for perfectness

while (k <= 10000){
if (n % k == 0) {

sum = sum + k;
}

else {
test = (sum - n);
}
if (test == n){
return (PERFECT);
}
else {
return (NOT_PERFECT);
}
k++;
}
}```
Thanks

2. It's complaining about the lack of a return statement past the end of your while loop.

There might be no actual way of exiting the loop by it's condition, but sometimes the compiler can't see that and issues a warning anyway.

3. Hmm, i'll bare that in mind.