постфиксный оператор простого префикса цикла c ++

#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. Пожалуйста, помогите мне.

Спасибо

1

Решение

Дано:

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 цикл выходит, и больше не печатается.

1

Другие решения

Чтобы понять, что он выводит, вам нужно пройти по коду:

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
2

j начинается с 5. Затем увеличивается до 6, затем сравнивается с 9 в ++j < 9, Это проходит условие, поэтому мы переходим к следующей строке, где выводится 6, а затем увеличивается j к 7. Возвращаемся к условному, j увеличивается до 8, что по-прежнему меньше 9, затем выводится, затем j увеличивается до 9, где условие не выполняется и программа заканчивается.

1

++j означает, что значение j увеличивается на 1 а потом используется в выражении, где он появляется

j ++ означает (ток) значение j используется в выражении, после этого j увеличивается

0

++j означает увеличение j на единицу, а затем оцените j.
С другой стороны, j ++ означает, что сначала нужно вычислить j, а затем увеличить его на 1.

0
По вопросам рекламы [email protected]