почему это печатать? (Язык C) - PullRequest
2 голосов
/ 14 июля 2011

Почему следующий код запускает цикл while?Я думал, что "средний = срок" является назначением, а не условием?Пожалуйста, объясни.Спасибо.

#include <stdio.h>

main ()
{
    int mid = 4, term = 4;

    while ( mid = term)
    printf("%d\n", --term);
}

Ответы [ 8 ]

8 голосов
/ 14 июля 2011

Результатом присваивания является значение.Поэтому выражение оценивается как 4 или ненулевое значение и, следовательно, в C, TRUE.

5 голосов
/ 14 июля 2011

mid = term - это выражение, оцениваемое как term.Так что цикл while будет работать до term = 0.

2 голосов
/ 14 июля 2011

Поскольку выражение имеет значение true.

По сути, вы говорите mid = 4

Поскольку любое значение int, отличное от нуля, возвращает условное выражение в true - цикл while будет выполнять цикл.

1 голос
/ 14 июля 2011

Выражение mid = term фактически оценивается в значение mid после присваивания.Итак, что оценивается, это while(4).Поскольку все ненулевые целые числа интерпретируются как true (это своего рода упрощение), цикл while будет работать до тех пор, пока term != 0.

0 голосов
/ 14 июля 2011

Вы присваиваете значение term для mid, затем while проверяет значение mid, которое оценивается как true, до тех пор, пока оно не достигнет 0.

Это должно вывести:

3
2
1 
0
0 голосов
/ 14 июля 2011

Вы присваиваете term mid, а затем проверяете истинность mid.mid правдиво всякий раз, когда оно ненулевое.Цикл завершается, когда term (и, следовательно, mid) уменьшается до значения 0, что ложно.

0 голосов
/ 14 июля 2011

Назначение также является выражением, которое содержит значение: значение, которое они назначают. mid=0 - это выражение, которое обращается в 0 (таким образом, ложно).

0 голосов
/ 14 июля 2011

И назначение, и проверка выполняются в цикле "while", поэтому printf() выполняется в этом случае четыре раза.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...