+ 1

why this ouputs 2?

int i = 0; for (;i<4;i+=2){ i=i*i; } cout << i%4; //2 ? I thought it should be 0, for the exit value of the loop is 4??

24th Dec 2016, 10:30 PM
little
little - avatar
4 Answers
+ 4
At the end of the loop the value of i is 6 because in the loop you assign to it the value of 4, then increase it by 2 so it gets the value of 6 and fails to enter the loop again. So 6%4 prints 2.
24th Dec 2016, 10:30 PM
Anna Papachristou
Anna Papachristou - avatar
+ 1
i = 0 before entering the loop. i enters loop 1 as: 0. Then exits as: 0 + 2. i enters loop 2 as: 2. Then exits as: 4 + 2. Thus failing the For loop condition of i<4.
24th Dec 2016, 11:37 PM
Candelario Eguia
Candelario Eguia - avatar
+ 1
first loop i = 0, i<4, i = 0*0 second loop i = 0 + 2, i<4, i = 2*2 third loop i = 4 + 2, 6 NOT lower than 4 DOESN'T ENTER FOR. i stays with value 6 and cout command follows. As you can see after the end of one loop, the first thing is to increase it and then check the bsc. Think that if you hadn't assign i in for loop, it would work like that: first loop i = 0, i < 4, do something second loop i = 0+2, i < 4, do something third loop i = 2+2 end of loop Variable i changes both in the check of for and inside the for. If you don't want that, you have to use one more variable.
25th Dec 2016, 10:55 AM
Anna Papachristou
Anna Papachristou - avatar
+ 1
Thanks for explanation! I missed the basic knowlege about the for loop algoritm. And I realize that it actually runs the statement (between brakets) before incrementing the value in the 3 rd for loop stage. Now it is more clear, thank you very much.
25th Dec 2016, 12:14 PM
little
little - avatar