Язык Си - руководство для начинающих
Шрифт:
count > stars fish Нарушение правила 3
B OC UNIX применяются также операция >>, позволяющая добавлять данные в конец существующего файла, и операция "канал" (|), связывающая файл вывода одной программы с вводом другой. Для получения более детальной информации обо всех этих операциях вам необходимо обратиться к руководству по ОС UNIX (по аналогии с этим нам приходит в голову название "ОС UNIX: руководство для начинающих").
Рассмотрим еще один пример: напишем очень простую программу, шифрующую сообщения; с этой целью мы немного изменим программу ввод-вывод4 и получим
/*
/* заменяет каждый символ текста */
/* следующим по порядку из кода ASCII */
#include
main
{ int ch;
while ((ch = getchar ) ! = EOF)
putchar (ch + 1);
}
Функция putchar переводит целое "ch + 1" в соответствующий символ. Выполните теперь компиляцию программы и поместите выполняемый объектный код в файл с именем simplecode. Затем занеси те приведенные ниже строки в файл с именем original. (Для этого можно воспользоваться системным текстовым редактором или, как было показано ранее, программой ввод-вывод4) .
Good spelling is an aid
to clear writing.
Теперь введите команду
simplecode < original
Результат должен выглядеть приблизительно так:
!!!!!Hppe!tqfmmjoh!jt!bo!bje>Kup!dmfbs!xsjujohl> k
Буква G заменится на Н, о на р и т.д. Вас может удивить следующее: во-первых, что пробелы превратились в восклицательные знаки. Это служит напоминанием, что пробел - такой же символ, как и все остальные. Во-вторых, две строки слились в одну. Почему?
Операционные системы, отличные от ОС UNIX
Здесь мы главным образом рассмотрим, чем отличаются другие операционные системы от ОС UNIX; поэтому если вы пропустили предыдущий раздел, вернитесь назад и прочтите его.
Все отличия можно разделить на две группы:
1. В других операционных системах реализована операция переключения.
2. Компиляторы с языка Си предоставляют возможность использовать операцию переключения.
Мы не можем рассмотреть все возможные операционные системы, поэтому приведем пример только одной из них, но весьма широко распространенной. Это система MS-DOS 2; она вначале была просто "отпрыском" ОС СР/М, а сейчас самостоятельно развивается в сторону операционной системы XENIX, подобной ОС UNIX. В версию MS-DOS были введены операции переключения < и >; они работают в ней точно так же, как было описано в предыдущем разделе.
У нас нет возможности рассмотреть все компиляторы с языка Си. Однако в пяти из шести версий компилятора, предназначенных для микрокомпьютеров, с которыми мы имели дело, для указания операции переключения используются символы < и >. Операция переключения, реализуемая компилятором с языка Си, отличается от аналогичной операции, выполняемой ОС UNIX, в двух аспектах:
1. Указанная операция выполняется при работе программ,
2. Между именем программы и знаком операции должен быть один пробел, а между знаком операции и именем файла пробел должен отсутствовать. Ниже приведен пример правильной команды:
input4 <words
Комментарий
Операция переключения - это простое, но мощное средство. С ее помощью мы можем превратить нашу крошечную программу ввод-вывод4 в инструмент для создания, чтения и копирования файлов. Данный способ служит иллюстрацией подхода, принятого в языке Си (и ОС UNIX) и заключающегося в конструировании простых средств, которые можно комбинировать различным образом для выполнения конкретных задач.
Резюме: как переключать ввод и вывод
На большинстве машин, в которых реализован компилятор с языка Си, операцию переключения можно использовать либо для всех программ, благодаря поддержке операционной системы, либо только для программ, написанных на Си, благодаря наличию компилятора с этого языка. Ниже prog будет именем выполняемой программы, a file1 и file2– именами файлов.
Переключение вывода в файл: >
prog >file1
Переключение ввода в файл: <
prog <file2
Комбинирванное переключение:
prog <file2 >filel или prog >filel <file2
В обеих формах записи файл с именем file2 используется для ввода данных, а файл с именем filel– для вывода.
Расположение пробелов
Некоторые системы (в особенности компиляторы с языка Си) требуют наличия пробела слева от знака операции переключения и его отсутствия справа от этого знака. Другие системы (ОС UNIX например) допускают любое число пробелов (в том числе и ни одного) слева и справа от знака данной операции.
Графический пример
Мы можем воспользоваться функциями getchar и putchar для изображения геометрических фигур при помощи символов. Ниже приведена программа, которая это делает. Она читает символ, а затем печатает его некоторое число раз зависящее от кода ASCII этого символа. Кроме того, она печатает на каждой строке требуемое число пробелов, чтобы текст оказывался в центре строки.
/* фигуры */
/* изображает симметричную фигуру из символов */
#include
main
{
int ch; /* переменная для ввода символа */
int index;
int chnum;
while ((ch=getchar) != '\n' )
{
chnum - ch %26; /* получение числа от 0 до 25 */
index = 0;