Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование на C / C++ / Нейбауэр А. Моя первая программа на С.doc
Скачиваний:
182
Добавлен:
02.05.2014
Размер:
3.75 Mб
Скачать

Код «возврат каретки»

Код «возврат каретки» \r выполняет «возврат каретки», перемещая курсор к началу той же строки без перехода на следующую. Если вы вывели на экран какую-то информацию, перевели курсор назад к началу этой строки и затем вывели на экран другую информацию, то старое сообщение стирается, а на его месте появляется новое.

Рис. 4.2 иллюстрирует различия между escape-последовательностями «возврат каретки» и «новая строка». Когда вы работаете с клавиатурой, нажатие клавиши Enter производит действие, аналогичное тому, что в языке Си называется новой строкой. Некоторые программисты называют это комбинацией возврата каретки и перевода строки, сокращенно CR/LF (от английского carriage return/line feed). Использование кода «возврат каретки» в языке Си не приводит к переходу на новую строку.

Рис. 4.2. Различия между кодами «возврат каретки» и «новая строка»

Действие кода \r можно видеть на примере следующей инструкции:

puts("Левый\rПравый");

В результате ее выполнения на экране появится только слово «Правый». И вот почему: после отображения на экране слова «Левый», код \r переводит курсор в начало этой строки, и при отображении слова «Правый» составляющие его символы замещают собой символы слова «Левый». Код \r сам по себе не уничтожает выведенные на экран символы, когда возвращает курсор, и только вывод новых символов после возврата курсора стирает уже существующий текст.

Код «возврат на шаг»

В отличие от кода \r, который возвращает курсор в начало строки, код «возврат на шаг» \b передвигает курсор только на одну позицию влево. При перемещении курсора существующие символы не уничтожаются, как и при возврате каретки.

Если вы используете коды «возврат каретки» или «возврат на шаг», а затем вводите код «новая строка», курсор переходит к следующей строке, не уничтожая существующий текст.

Код «перевод страницы»

Когда вы посылаете информацию на печатающее устройство (как именно это делается, вы узнаете позже), код «перевод страницы» \f вытягивает из него текущую страницу. Этот код распознается большинством принтеров.

После вывода сообщения на печать, большинство программистов использует код «перевод страницы», чтобы быть уверенными в том, что страница с последним сообщением готова и на нее не будет печататься другая информация. Если вывести изображение этого кода на экран при помощи функции puts() или putchar(), он появится в виде маленького графического символа, который никак не влияет на остальную информацию, отображаемую на дисплее.

Отображение специальных символов на экране монитора

Вы можете использовать escape-последовательности для вывода на дисплей специальных символов. Программисты часто используют их для вывода символов, изображение которых невозможно получить иным способом:

Escape-последо-вательность

Функция

\'

отображает одинарную кавычку

\"

отображает двойную кавычку

\\

отображает обратную косую черту

Например, вы желаете вывести на экран текст:

Мы зовем ее "Наташа"

который содержит кавычки с именем «Наташа». Если вы попробуете отобразить эту строку с помощью инструкции

puts("Мы зовем ее "Наташа"");

то получите от компилятора сообщение об ошибке. Вспомните, параметр, передаваемый функции puts(), должен начинаться и заканчиваться кавычками, чтобы компилятор Си знал, где начинается и где заканчивается строка. В приведенном выше ошибочном примере, компилятор будет интерпретировать параметр как «Мы зовем ее» с дополнительными символами «Наташа""», которые расположены снаружи по отношению к паре двойных кавычек, но внутри пары скобок, содержащих параметр для вызова функции puts(). Для компилятора в такой строке оказывается слишком много информации.

Приведем теперь правильную запись этой инструкции:

puts("Мы зовем ее \"Наташа\"");

Рис. 4.3. Отображение символов «кавычки»

На рис. 4.3 показано, каким образом компилятор интерпретирует эту строку.

Кроме кавычек и обратной косой черты, вы можете использовать управляющие коды для отображения различных графических символов. IBM PC и совместимые компьютеры могут отображать набор символов, известных как расширенный набор ASCII-символов. Он включает в себя все буквы, цифры и знаки препинания, которые можно ввести с клавиатуры, а также некоторые графические символы и греческие буквы*. Каждый символ в наборе имеет собственный номер, например, номер 3 соответствует символу «сердечко» (по карточной терминологии — «черви»). Чтобы отобразить символ на экране, надо поместить соответствующий ему номер (в виде трех цифр) после знака обратной косой черты:

putchar('\003');

В результате выполнения этой инструкции на дисплей выводится символ «сердечко». Для того чтобы отобразить символы всех карточных мастей, используйте следующую программу:

______________________________

* В русифицированных наборах — буквы русского алфавита. (Прим.перев.)

main()

{

puts("Черви \003\n");

puts("Бубны \004\n");

puts("Трефы \005\n");

puts("Пики \006\n");

}

Функция puts() выведет на экран названия всех карточных мастей и соответствующие им графические символы (рис.4.4). В табл.4.1 приведены некоторые символы, которые могут быть изображены только путем использования их кодов.

Рис. 4.4. Отображение графических символов по их кодам

Для отображения графических символов можно использовать и функцию putchar() за счет двойственности символьных переменных. Если вы определили переменную типа int, ей, понятное дело, можно присвоить числовое значение:

int count;

count=5;

Если затем вы используете эту переменную как параметр, передаваемый функции putchar()

putchar(count);

символ, ассоциированный со значением переменной, будет отображен на экране.

Таблица 4.1. Некоторые используемые коды символов.

Один из символов в наборе ASCII не появляется на экране, зато при попытке вывести его раздается звонок! Использование escape-последовательности \007 приводит к подаче звукового сигнала встроенным динамиком вашего компьютера. Приведенная ниже программа дважды подает звуковой сигнал, привлекая внимание к сообщению на экране:

#define BELL '\007' /* BELL легче запомнить, чем \007 */

main()

{

putchar(BELL); /*Подача звукового сигнала*/

putchar(BELL); /*Подача звукового сигнала*/

puts("Вниманию покупателей!\n");

puts("В отделе спортивных товаров \

проводится сезонная распродажа\n");

}

Директива #define определяет константу BELL со значением \007. И хотя для определения константы вам пришлось ввести с клавиатуры четыре символа, компилятор воспримет ее как обычную символьную константу. Сигнал динамика слышится тогда, когда вы пытаетесь вывести константу BELL на дисплей с помощью функции putchar().

Замечания по Си++

Если вы чувствуете в себе силы, то можете познакомиться с некоторой дополнительной информацией о специальных символах. Вы можете найти описание набора ASCII-символов во многих руководствах по компьютерам и печатающим устройствам. Обычно номера кодов приведены в десятичной и шестнадцатеричной системах счисления. Некоторые компиляторы Си воспринимают запись в этих форматах, но стандарты Си K&R и ANSI подразумевают использование восьмеричных кодов. Применяйте восьмеричные коды (приведенные в табл.4.1) для совместимости с любыми компиляторами Си.

Расширенный набор ASCII-символов содержит все буквы и символы, которые можно отобразить на экране монитора, а не только те, которые вводятся непосредственно с клавиатуры. В некоторых источниках вы можете найти его подмножество, набор ASCII-символов, который включает только коды от 0 до 127 в десятичной системе счисления. Сюда входят только символы, которые можно ввести с клавиатуры.