I'm doing an exercise out of a book I've been using (Deitel: C How to Program) and I'm trying to make a program that determines perfect numbers.
Everything was going well but all the sudden it is saying alot of my variables aren't declare and there is a problem with my function!
Code:
exercise3.c:44: error: syntax error before "int"
exercise3.c:45: error: redeclaration of `check'
exercise3.c:44: error: `check' previously declared here
exercise3.c:62: error: `counter' undeclared (first use in this function)
exercise3.c:62: error: (Each undeclared identifier is reported only once
exercise3.c:62: error: for each function it appears in.)
Code:
#include <stdio.h>
int perfect(int number);
int main()
{
int input = 0, factor1, factor2, counter = 2, check = 0;
scanf("%d", &input);
counter = 2;
if ( perfect(input) == 1)
{
printf("%d is a perfect number\n", input);
for(factor1 = 2; factor1 <= (input - 1); ++factor1)
{
for (factor2 = 2; factor2 <= (input - 1); ++factor2)
{
if ( (factor1 * factor2) == input)
{
if (factor1 != check && factor2 != check)
{
if ( (counter % 2) == 0)
check = factor2;
++counter;
printf("%d + %d + ", factor1, factor2);
}
}
}
}
printf("1 = %d\n", input);
}
return 0;
}
int perfect (int number)
{
int factor1, factor2, check = 0, perfect = 0, int counter = 2;
int check = 2;
for (factor1 = 2; factor1 <= (number - 1); ++factor1)
{
for (factor2 = 2; factor2 <= (number - 1); ++factor2)
{
if ( (factor1 * factor2) == number)
{
/* -------------------------------------------------------------------------------------- */
/* the check needs to be worked out to register at the half way point through */
/* factoring so numbers aren't counted twice */
/* -------------------------------------------------------------------------------------- */
if (factor1 != check && factor2 != check)
{
perfect = perfect + factor1 + factor2;
if ( (counter % 2) == 0 )
check = factor2;
++counter;
printf(" factor1 is %d\n factor2 is %d\n check is %d\n",
factor1, factor2, check);
printf(" perfect is %d\n", perfect);
}
}
}
}
if ( (perfect + 1) == number)
return 1;
else
return 0;
}
Does anyone know what the deal is?