1.5.4. Подсчет строк
Следующая программа подсчитывает количество строк в файле ввода. Предполагается, что строки ввода заканчиваются символом новой строки \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.
Упражнение 1-6.
----------------
Напишите программу для подсчета пробелов, табуляций и новых строк.
Упражнение 1-7.
----------------
Напишите программу, которая копирует ввод на вывод, заменяя при этом каждую последовательность из одного или более пробелов на один пробел.
ПРЕДЫДУЩАЯ ЧАСТЬ 1.5.3. Подсчет символов |
СОДЕРЖАНИЕ | СЛЕДУЮЩАЯ ЧАСТЬ 1.5.5. Подсчет слов |