Категории
Самые читаемые
onlinekniga.com » Компьютеры и Интернет » Программирование » Язык Си - руководство для начинающих - M. УЭИТ

Язык Си - руководство для начинающих - M. УЭИТ

Читать онлайн Язык Си - руководство для начинающих - M. УЭИТ

Шрифт:

-
+

Интервал:

-
+

Закладка:

Сделать
1 ... 26 27 28 29 30 31 32 33 34 ... 98
Перейти на страницу:

     2. Имя выполняемой программы должно стоять слева от знака операции, а имя файла - справа от него.

     3. При использовании этих операций ввод не может осуществляться более чем из одного файла, а вывод - более чем в один файл.

     4. Обычно между именем и операцией пробелы не обязательны кроме тех редких случаев, когда используются некоторые символы специального назначения в интерпретаторе команд UNIX. Мы могли бы писать, например, так: getput4 < words, или, что более предпочтительно, getput4 < words.

Мы уже привели выше несколько примеров правильного использования операций переключения. Ниже дается несколько ошибочных примеров (addup и count - выполняемые программы, a fish и stars - текстовые файлы).

fish > stars                 Нарушение правила 1

addup < count            Нарушение правила 1

stars > count              Нарушение правила 2

addup < fish < stars     Нарушение правила 3

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. Указанная операция выполняется при работе программ, написанных только на Си, в то время как в ОС UNIX она может использоватъся при работе любой программы.

     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;

while (index++ <(30 - chnum))

putchar( ); /* печать пробелов сдвига к центру */

index = 0;

while (index++ <(2* chnum + 1))

putchar (ch); /* повторная печать символа */

putchar( n );

 }

 }

     Единственный новый технический прием здесь - это использование подвыражений таких, как (30-chnum) при записи условии в циклах while. Один цикл while управляет печатью необходимого числа начальных пробелов в каждой строке, а второй - выводом символов на печать. Результат работы программы зависит от данных, которые вводятся. Если, например, вы введете. 

What is up?

то на экране появится следующее

wwwwwwwwwwwwwwwwwww

h

ааааааааааааааааааааааааааааааааааааааа

ttttttttttttttttttttttttt iiiiiiiiiiiiiiiiiiiiiiiiiii

sssssssssssssssssssssss

uuuuuuuuuuuuuuuuuuuuuuuuuuu ppppppppppppppppp

??????????????????????????

     Что вы можете делать с помощью этой программы? Можете просто игнорировать ее, или же (переписав ее по-другому) изменять вид фигур которые она выводит на печать, либо наконец искать такие комбинации входных символов, что в результате на экране будут появляться привлекательные фигуры например при вводе такой последовательности:

h i j k l m n o p q r s t u i i i

Результат работы программы будет выглядеть так

h i i i j j j j j

k k k k k k k l l l l  l l l l l

m m m m m m m m m m m  n n n n n n n n n n n n n

o o o o o o o o o o o o o o o p p p p p p  p p p p p p p p p p p

q q q q q q q q q q q q q q q q q q q г г г г г г г г г г г г  г г г г г г г  г г s s s s s s s s s s s s s s s s s s s s s s s

t t t t t t t t t t t t t t t t t t t t t t t t t

1 ... 26 27 28 29 30 31 32 33 34 ... 98
Перейти на страницу:
На этой странице вы можете бесплатно читать книгу Язык Си - руководство для начинающих - M. УЭИТ.
Комментарии