Подсчет строк
Следующая программа подсчитывает количество строк в файле ввода. Предполагается, что строки ввода заканчиваются символом новой строки \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
Напишите программу, которая копирует ввод на вывод, заменяя при этом каждую последовательность из одного или более пробелов на один пробел.