C Programming - Control Instructions - Discussion

Discussion Forum : Control Instructions - Find Output of Program (Q.No. 4)
4.
What will be the output of the program?
#include<stdio.h>
int main()
{
    unsigned int i = 65535; /* Assume 2 byte integer*/
    while(i++ != 0)
        printf("%d",++i);
    printf("\n");
    return 0;
}
Infinite loop
0 1 2 ... 65535
0 1 2 ... 32767 - 32766 -32765 -1 0
No output
Answer: Option
Explanation:

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'.

Discussion:
17 comments Page 1 of 2.

Mohan7575 said:   6 years ago
That's right, the range of unsigned int is 65535. so when increment by 1 it doesn't go -65534 ( because unsigned int can't accept negative numbers accept only positive numbers) hence it goes to first positive number 0.

Then it is further incremented in printf so it shows 1.
(1)

Ashish Kunnath said:   9 years ago
So basically, EVEN I THOUGHT THAT IT SHOULD BE NO OUTPUT as after the first increment itself it would become 0.

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.

Bunny said:   9 years ago
The value of "i" will never be zero in while statement because it will always get odd value like
65535, 1, 3, 5, 7.

Nilesh said:   9 years ago
In the unsigned int 0 will come at one point ,then condition get false and loops get break then why it is printing infinite times?

Sapna kumari said:   10 years ago
Please can you clear how i = 1 in output?

Kritika said:   1 decade ago
@ Rachna.

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.

Rachana said:   1 decade ago
i=65535; when incremented value should be 0.

Ashish dev said:   1 decade ago
The size of unsigned int is 0 to 65535.

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?
(1)

Vishwambhar said:   1 decade ago
What happened if I is signed integer.

Sree said:   1 decade ago
On loop 2, before the post increment doesn't I value become zero. Hence terminating the while loop?


Post your comments here:

Your comments will be displayed after verification.