Can anyone explain this program? How does it print '5' at the end? Thanks in advance.
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a = 1;
while (a++ <= 1)
while (a++ <= 2);
printf("%d",a); //5
return 0;
}
Can anyone explain this program? How does it print '5' at the end? Thanks in advance.
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a = 1;
while (a++ <= 1)
while (a++ <= 2);
printf("%d",a); //5
return 0;
}
Note the absence of the ;
after the first while statement. This means that there are nested while loops.
while (a++ <= 1)
while (a++ <= 2);
Let us check the lines one by one.
a = 1; // initialize
while (a++ <= 1) // condition is TRUE, after this statement a === 2
while (a++ <= 2); // condition is TRUE, after this a == 3
while (a++ <= 2); // condition is FALSE,
// but `a++` is still evaluated. So after this statement a == 4.
// Inner loop exits
while (a++ <= 1) // condition is FALSE,
// `a++` is evaluated and after this a==5
// Outer Loop exits
printf("%d",a); // print value of a i.e. print 5.
when it is in the first while the value that is checked is 1 then it gets increased by 1 and goes into the next while in there it's 2 so 2<=2 is true and it gets increased by 1 to 3 while checking 3<=2 it gets increased by 1 anyway cause a++ does not care if the condition is true so now we have a=4 it jumps back to the first while for checking as you know 4<=1 is sill false but it gets increased by one anyway and 5 comes out.
a = 1; First iteration Second iteration
while (a++ <= 1) { (1 <= 1) True (4 <= 1) Fail
(a = a + 1) == 2 (a = a + 1) == 5
while (a++ <= 2) { }; (a == 2) <= 2 True
(a == 3) first time
(a == 4) When while evalutes to fail
}
If you for reasons unknown can't use a debugger and single step while watching the variable, then you could add some printf debugging code along the way. And fix the indention while you are at it:
#include <stdio.h>
int main()
{
int a = 1;
while (printf("Outer while %d\n", a), a++ <= 1)
while (printf("Inner while %d\n", a), a++ <= 2)
;
printf("Result %d\n", a);
return 0;
}
Output:
Outer while 1
Inner while 2
Inner while 3
Outer while 4
Result 5
This prints the value each time it is checked, before it is increased. Basically both loops have to check the value a first time when it is in range, then a second time when it is out of range.
Please note that mixing ++ with other operators in the same expression is bad practice. The above is some fishy, artificial code, just used to illustrate the execution path.