C Programming - Control Instructions - Discussion
#include<stdio.h>
int main()
{
unsigned int i = 65535; /* Assume 2 byte integer*/
while(i++ != 0)
printf("%d",++i);
printf("\n");
return 0;
}
Here unsigned int size is 2 bytes. It varies from 0,1,2,3, ... to 65535.
Step 1:unsigned int i = 65535;
Step 2:
Loop 1: while(i++ != 0) this statement becomes while(65535 != 0). Hence the while(TRUE) condition is satisfied. Then the printf("%d", ++i); prints '1'(variable 'i' is already incremented by '1' in while statement and now incremented by '1' in printf statement)
Loop 2: while(i++ != 0) this statement becomes while(1 != 0). Hence the while(TRUE) condition is satisfied. Then the printf("%d", ++i); prints '3'(variable 'i' is already incremented by '1' in while statement and now incremented by '1' in printf statement)
....
....
The while loop will never stops executing, because variable i will never become '0'(zero). Hence it is an 'Infinite loop'.
Then it is further incremented in printf so it shows 1.
But it's "post" increment hence, first increment as the reason says is 65535 != 0
Then it GETS INCREMENTED TO 0 ("POST INCREMENT").
THEN increment In printf thus prints 1, and goes on with odd values.
Hope this helped you.
65535, 1, 3, 5, 7.
Here first the value of I is checked in while loop as 65535 which is not equal o zero so condition is true no as it is post increment value of I is 0 when it passes to printf statement.
As again printf uses pre increment 1 is printed also with this mechanism the value of I never get 0 in while loop so this whole loop gets executed infinite times.
So here:
#include<stdio.h>
int main()
{
unsigned int i = 65535; /* Assume 2 byte integer*/
while(i++ != 0)
printf("%d",++i);
printf("\n");
return 0;
}
When integer gets increment (i++) by 1 then value should be 0.
That does not satisfy the while loop condition. Therefore it must print /n (i.e No output) only once right
So why its infinite loop?