The program is supposed to count the number of bits set by an integer. for example: 5 is 00000101 and has two bits set. compiling the program with debug statements makes me think that the program isn't even entering the integer into the loop

Code:

/********************************************************
* *
* FILE: ch10_ex4.c *
* CREATED: 8/15/07 *
* BY: bpf *
* *
* this program counts the number of bits set in an *
* integer *
* *
********************************************************/
#include<stdio.h>
main()
{
char line[100];
int itgr; /* the integer value of the input number */
int r; /* remainder */
int set = 0; /* number of variables set */
int n; /* index into the line of bits */
int subt = 0; /* the value to subtract from the remainder starts at zero each loop */
/* input number */
(void)printf("enter an integer: ");
(void)fgets(line, sizeof(line), stdin);
(void)sscanf(line, "%d", &itgr);
r = itgr; /* remainder starts off the same as the integer */
while(0)
{
/* if the remainder is equal to one, the one's column is set and the loop can stop */
if (r == 1)
{
set++;
break;
}
/* if the remainder is equal to zero the number of bits set are counted and the loop stops */
else{ if (r == 0)
{
break;
}
/* the highest multiple of two is counted up to and becomes the number subtracted from the remainder */
else{ for (n = 1; n <= r; n * 2)
{
subt = n;
}
/* the remainder is lowered and one column is set */
r = r - subt;
set++;
}
}
}
/* how many bits are set */
(void)printf("%d bits are set\n", set);
return(0);
}