input_is_good = (scanf("%ld", &num) == 1);
Такое присваивание имеет смысл, поскольку операция == возвращает значение 1 или 0. Кстати, круглые скобки, заключающие в себе выражение ==, не нужны, поскольку операция == имеет более высокий приоритет, чем =; тем не менее, они способствуют улучшению читабельности кода. Кроме того, взгляните, насколько изменение имени переменной делает проверку цикла while более понятной:
while (input_is_good)
Стандарт С99 также предлагает заголовочный файл stdbool.li, в котором bool сделан псевдонимом типа Bool и определены символические константы true и false для значений 1 и 0. Включение этого заголовочного файла позволяет писать код, совместимый с программами на языке C++, где bool, true и false являются ключевыми словами.
Если ваша система не поддерживает тип Bool, его можно заменить типом int, и приведенный выше пример будет работать так же.
приоритеты операций отношений
Приоритет операций отношений ниже приоритета арифметических операций, + и -, но выше, чем у операции присваивания. Это значит, например, что следующее выражение:
х > у + 2 эквивалентно х > (у + 2)
И также значит, что х = у > 2 эквивалентно х = (у > 2)
Другими словами, переменной х присваивается значение 1, если у больше 2, и 0 — в противном случае; переменной х не присваивается значение у.
Операции отношений имеют больший приоритет, чем операции присваивания. Поэтому
x_bigger = х > у; эквивалентно
x_bigger = (х > у);
Операции отношений по своему приоритету делятся на две группы.
Группа с большим приоритетом: <<=>>=
Группа с меньшим приоритетом: == ! =
Подобно большинству других операций, операции отношений выполняются слева направо. Поэтому
ex != wye == zee
эквивалентно
(ex != wye) == zee
214 Глава 6
Сначала осуществляется проверка на неравенство значений переменных ех и wye. Затем полученное значение, которое может быть равно 1 или 0 (“истина” или “ложь”), сравнивается со значением zee. Мы вовсе не предлагаем вам применять конструкции подобного рода, но считаем своим долгом дать соответствующее пояснение.
В табл. 6.2 показаны приоритеты операций, представленных до сих пор. В справочном разделе || приложения Б приведена информация но приоритетам всех операций.
Таблица 6.2. Приоритет операций

Сводка: оператор while Ключевое слово
while
Общий комментарий
Оператор while создает цикл, который повторяется до тех пор, пока проверочное выражение не станет ложным, или нулевым. Оператор while представляет собой цикл с предусловием; это значит, что решение относительно очередной итерации цикла принимается перед проходом. Следовательно, вполне возможно, что цикл вообще не будет выполнен. Операторная часть цикла может быть простым или составным оператором.
Форма записи
while (выражение) опера тор
Часть оператор повторяется до тех пор, пока выражение не станет ложным или равным О,
Примеры
while (n++ < 100)
printf(" %d %d\n",n, 2 * n + 1); // одиночный оператор while (fargo < 1000)
{ // составной оператор
fargo = fargo + step; step = 2 * step;
}
Управляющие операторы С: циклы 215
Сводка: операции отношений и условные выражения Операции отношений
Каждая операция отношения сравнивает значение в ее левой части со значением в ее правой части:
< меньше <= меньше или равно == равно
>= больше или равно > больше ! = неравно Условные выражения
Простое условное выражение состоит из знака операции отношения и операндов слева и справа. Если выражение истинно, то условное выражение имеет значение 1. Если отношение ложно, то условно! выражения получает значение 0.
Примеры
5 > 2 истинно и принимает значение 1.
(2 + а) == а ложно и принимает значение 0.
Неопределенные циклы и циклы со счетчиком
Некоторые примеры цикла while представляли собой неопределенные циклы.. Это означает, что заранее нельзя сказать, сколько раз цикл выполнится до того, как выражение станет ложным. Например, когда в листинге 6.1 использовался интерактивный цикл для суммирования целых чисел, заранее не было известно, сколько чисел будет введено. Тем не менее, в других примерах применялись циклы со счетчиком. Такие циклы выполняют заранее известное количество итераций. В листинге 6.10 приведен пример оператора цикла while со счетчиком.
Листинг 6.10. Программа sweetie1.c

Читать дальше