Почему следующий код запускает цикл while?Я думал, что "средний = срок" является назначением, а не условием?Пожалуйста, объясни.Спасибо.
#include <stdio.h> main () { int mid = 4, term = 4; while ( mid = term) printf("%d\n", --term); }
Результатом присваивания является значение.Поэтому выражение оценивается как 4 или ненулевое значение и, следовательно, в C, TRUE.
4
TRUE
mid = term - это выражение, оцениваемое как term.Так что цикл while будет работать до term = 0.
mid = term
term
term = 0
Поскольку выражение имеет значение true.
По сути, вы говорите mid = 4
mid = 4
Поскольку любое значение int, отличное от нуля, возвращает условное выражение в true - цикл while будет выполнять цикл.
Выражение mid = term фактически оценивается в значение mid после присваивания.Итак, что оценивается, это while(4).Поскольку все ненулевые целые числа интерпретируются как true (это своего рода упрощение), цикл while будет работать до тех пор, пока term != 0.
mid
while(4)
true
term != 0
Вы присваиваете значение term для mid, затем while проверяет значение mid, которое оценивается как true, до тех пор, пока оно не достигнет 0.
while
Это должно вывести:
3 2 1 0
Вы присваиваете term mid, а затем проверяете истинность mid.mid правдиво всякий раз, когда оно ненулевое.Цикл завершается, когда term (и, следовательно, mid) уменьшается до значения 0, что ложно.
Назначение также является выражением, которое содержит значение: значение, которое они назначают. mid=0 - это выражение, которое обращается в 0 (таким образом, ложно).
mid=0
0
И назначение, и проверка выполняются в цикле "while", поэтому printf() выполняется в этом случае четыре раза.
printf()