#include "stdafx.h"#include <iostream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
int j = 5;
while ( ++j < 9)
cout << j++ << endl;
cin.get();
return 0;
}
Итак, я работаю над книгой и понимаю, как все это работает, но я ищу более конкретное объяснение того, почему это печатает 6 и 8. Пожалуйста, помогите мне.
Спасибо
Дано:
int j = 5;
while ( ++j < 9)
cout << j++ << endl;
Почему только 6
а также 8
печататься?
Войдя в петлю, j
5. Тогда while (++j ...
увеличивает это до 6. Тогда cout
выполняет, распечатывая 6. Затем побочный эффект j++
происходит, увеличивая его до 7.
На следующей итерации цикла ++j
увеличивает его снова, давая 8
, который затем распечатывается. Тогда побочный эффект от j++
происходит, увеличивая j
до 9.
Тогда, когда while (++j < 9)
выполняется снова, j
был увеличен до 10, поэтому while
цикл выходит, и больше не печатается.
Чтобы понять, что он выводит, вам нужно пройти по коду:
j = 5
j = j + 1 // 6
j < 9 ? yes
output j // 6
j = j + 1 // 7
go to start of loop
j = j + 1 // 8
j < 9 ? yes
output j // 8
j = j + 1 // 9
go to start of loop
j = j + 1 // 10
j < 10 ? no
j
начинается с 5. Затем увеличивается до 6, затем сравнивается с 9 в ++j < 9
, Это проходит условие, поэтому мы переходим к следующей строке, где выводится 6, а затем увеличивается j
к 7. Возвращаемся к условному, j
увеличивается до 8, что по-прежнему меньше 9, затем выводится, затем j
увеличивается до 9
, где условие не выполняется и программа заканчивается.
++j означает, что значение j увеличивается на 1 а потом используется в выражении, где он появляется
j ++ означает (ток) значение j используется в выражении, после этого j увеличивается
++j означает увеличение j на единицу, а затем оцените j.
С другой стороны, j ++ означает, что сначала нужно вычислить j, а затем увеличить его на 1.