Следующая программа подсчитывает число символов; онапредставляет собой небольшое развитие программы копирования. MAIN() /* COUNT CHARACTERS IN INPUT */ { LONG NC; NC = 0; WHILE (GETCHAR() != EOF ) ++NC; PRINTF("%1D\N", NC); } Оператор ++NC; демонстрирует новую операцию, ++, которая означает увеличе-ние на единицу. Вы могли бы написать NC = NC + 1 , но ++NCболее кратко и зачастую более эффективно. Имеется соответст-вующая операция -- уменьшение на единицу. Операции ++ и --могут быть либо префиксными (++NC), либо постфиксными(NC++); эти две формы, как будет показано в главе 2, имеют ввыражениях различные значения, но как ++NC, так и NC++ уве-личивают NC. Пока мы будем придерживаться префиксных опера-ций. Программа подсчета символов накапливает их количество впеременной типа LONG, а не INT . На PDP-11 максимальное зна-чение равно 32767, и если описать счетчик как INT , то онбудет переполняться даже при сравнительно малом файле ввода;на языке "C" для HONEYWELL и IBM типы LONG и INT являютсясинонимами и имеют значительно больший размер. Спецификацияпреобразования %1D указывает PRINTF , что соответствующийаргумент является целым типа LONG . Чтобы справиться с еще большими числами, вы можете ис-пользовать тип DOUBLE / FLOAT двойной длины/. мы также ис-пользуем оператор FOR вместо WHILE с тем, чтобы проиллюстри-ровать другой способ записи цикла. MAIN() /* COUNT CHARACTERS IN INPUT */ { DOUBLE NC; FOR (NC = 0; GETCHAR() != EOF; ++NC) ; PRINTF("%.0F\N", NC); } Функция PRINTF использует спецификацию %F как для FLOAT, так и для DOUBLE ; спецификация %.0F подавляет печать не-существующей дробной части. Тело оператора цикла FOR здесь пусто, так как вся рабо-та выполняется в проверочной и реинициализационной частях.Но грамматические правила языка "C" требуют, чтобы операторFOR имел тело. Изолированная точка с запятой, соответствую-шая пустому оператору, появляется здесь, чтобы удовлетворитьэтому требованию. Мы выделили ее на отдельную строку, чтобысделать ее более заметной. Прежде чем мы распростимся с программой подсчета симво-лов, отметим, что если файл ввода не содержит никаких симво-лов, то условие в WHILE или FOR не выполнится при самом пер-вом обращении к GETCHAR , и, следовательно , программа вы-даст нуль, т.е. Правильный ответ. это важное замечание. од-ним из приятных свойств операторов WHILE и FOR является то,что они проверяют условие в начале цикла, т.е. До выполнениятела. Если делать ничего не надо, то ничего не будет сдела-но, даже если это означает, что тело цикла никогда не будетвыполняться. программы должны действовать разумно, когда ониобращаются с файлами типа "никаких символов". ОператорыWHILE и FOR помогают обеспечить правильное поведение прог-рамм при граничных значениях проверяемых условий.