• C

# Unable to understand while my while loop doesn't work (my first C exercise)

Hi.

Yes, a nb.
I have a problem with the following program I need to write as an essay.
assuming these are my variables:

startRange = 9
endRange = 20

I need to calculate which are the "powerfull" numbers, never mind what it means :)
the thing is that my while doesn't exit when it reaches the appropriate condition.

I am talking about the only while loop in this piece of code, so it won't be hard for you guys to find it :)

printf("Number : acceeding / powerfull\n");
for(currentNumber=startRange; currentNumber<=endRange; currentNumber++)
{
x=2;
while(currentNumber%x!=0 && x<currentNumber)
{
printf("%d",currentNumber);
printf("\n");
x++;
}
}
LVL 1
###### Who is Participating?

Data Warehouse Architect / DBACommented:
Hi webiz,

This might be a little clearer if the inner loop is rewritten.

printf("Number : acceeding / powerfull\n");
for(currentNumber=startRange; currentNumber<=endRange; currentNumber++)
{
for (x=2; currentNumber%x!=0 && x<currentNumber; x++)
{
printf("%d\n",currentNumber);
}
}

This is the exact loop that you execute in your example.  Perhaps you really mean to do something like this:

printf("Number : acceeding / powerfull\n");
for(currentNumber=startRange; currentNumber<=endRange; currentNumber++)
{
for (x=2; x<currentNumber; x++)
{
if (currentNumber % x != 0)
{
printf("%d\n",currentNumber);
break;
}
}
}

Good Luck,
Kent
0

Commented:
It looks like the while loop does exit when currentNumber%x ==0 or x>= currentNumber
if that is not what you wanted, do you consider to be appropriate condition?
It may be hard for you to see what x is in the loop since you never print it.
0

Author Commented:
well, it might look like it but it doesn't ;)
what I am getting is the following result:

9
11
11
11
11
11
11
11
11
11
13
13
13
13
13
13
13
13
13
13
13
15
17
17
17
17
17
17
17
17
17
17
17
17
17
17
17
and so on...

while I am supposed to get only
9
11
13
17
.....
0

Commented:
well when currentNumber is 11,  x will loop from 2 to 10, and then exit the loop when x=11 and && x<currentNumber fails
each time through the loop, you print currentNumber, so you print it 11-2 = 9 times

Why are you supposed to get 9 and not 15?
0

Commented:
what do u mean by powerfull numbers. if we know what it means it will be better to understand the problem
0

Commented:
if you want powers of primes, then you should have included 16
0

Commented:
you're printing "currentnumber" in the loop, so you'll see that value repeated as many times as the loop goes around.

0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.