Следующая программа подсчитывает количество строк в
файле ввода. Предполагается, что строки ввода заканчиваются
символом новой строки \N, скрупулезно добавленным к каждой
выписанной строке.
MAIN() /* COUNT LINES IN INPUT */
{
INT C,NL;
NL = 0;
WHILE ((C = GETCHAR()) != EOF)
IF (C =='\N')
++NL;
PRINTF("%D\N", NL);
}
Тело WHILE теперь содержит оператор IF , который в свою
очередь управляет оператором увеличения ++NL. Оператор IF
проверяет заключенное в круглые скобки условие и, если оно
истинно, выполняет следующий за ним оператор /или группу
операторов, заключенных в фигурные скобки/. Мы опять исполь-
зовали сдвиг вправо, чтобы показать, что чем управляет.
Удвоенный знак равенства == является обозначением в
языке "C" для "равно" /аналогично .EQ. В фортране/. Этот
символ введен для того, чтобы отличать проверку на равенство
от одиночного =, используемого при присваивании. Поскольку в
типичных "C" - программах знак присваивания встречается при-
мерно в два раза чаще, чем проверка на равенство, то естест-
венно, чтобы знак оператора был вполовину короче.
Любой отдельный символ может быть записан внутри оди-
ночных кавычек, и при этом ему соответствует значение, рав-
ное численному значению этого символа в машинном наборе сим-
волов; это называется символьной константой. Так, например,
'A' - символьная константа; ее значение в наборе символов
ASCII /американский стандартный код для обмена информацией/
равно 65, внутреннему представлению символа а. Конечно, 'A'
предпочтительнее, чем 65: его смысл очевиден и он не зависит
от конкретного машинного набора символов.
Условные последовательности, используемые в символьных
строках, также занимают законное место среди символьных кон-
стант. Так в проверках и арифметических выражениях '\N'
представляет значение символа новой строки. Вы должны твердо
уяснить, что '\N' - отдельный символ, который в выражениях
эквивалентен одиночному целому; с другой стороны "\N" - это
символьная строка, которая содержит только один символ. Воп-
рос о сопоставлении строк и символов обсуждается в главе 2.