Возврат каретки что это

от admin

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Русские Блоги

Интересная история «возврата каретки» и разницы между «возвратом каретки» и «переводом строки»

При вводе текста нажатие клавиши Enter приведет к началу новой строки. Это обычное использование неизбежно введет в заблуждение новичков в C / C ++: возврат каретки (CR, возврат каретки) ‘\ r’ и перевод строки (LF, перевод строки) ‘\ n’ понимание, здесь мы пока отложим этот вопрос в сторону, а поговорим о нем позже. Давайте сначала посмотрим на интересный исторический источник «возврата каретки».

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

Когда строка заполнена, пользователь переместит «машинку» в исходное положение. В это время у пишущей машинки будет два действия: одно — вернуть «машинку» на место, а второе — перевернуть вверх на строку (эквивалент «Автомобиль» перемещается на одну строку вниз), так что вы можете начать ввод следующей строки. Действие нажатия «Автомобиль» здесь называется «Enter».

Движение возврата "символа" указанной выше пишущей машинки эквивалентно нашему возврату каретки ‘\ r’, только возврат к началу строки, но все еще в текущей строке, а действие прокрутки ролика эквивалентно перемещению строки ‘ \ n ‘, переход к следующей строке. Символ возврата каретки ‘\ r’ соответствует коду ASCII с шестнадцатеричным кодом 0x0d, десятичный — 13, а символ новой строки ‘\ n’ соответствует шестнадцатеричному значению 0x0a, а десятичный — 10.

В разных системах возврат каретки обрабатывается по-разному: в наших часто используемых системах Windows он представлен двумя символами «\ r \ n», как показано на рисунке, между первой и второй строками есть два символа. Цифры — 0D 0A , которые представляют собой ‘\ r’ и ‘\ n’, соответствующие коду ASCII. Это представление очень похоже на поведение пишущей машинки.

Итак, что же будет с Linux таким же образом? Пожалуйста, продолжай смотреть.

Через vim в Linux мы видим, что между a, ab и abc есть только один бит символа, который соответствует 0a, который является ‘\ n’ в коде ASCII, что означает, что в Linux используется только один символ новой строки. Представлять.

Тогда давайте вернемся к обсуждению ‘\ r’ и ‘\ n’ в C / C ++. В C / C ++ исходный стиль сохраняет это понимание символа новой строки. Символ возврата каретки ‘\ r’ означает только возврат в начало строки и не включает действие новой строки. Новая строка завершается символом ‘\ n ‘. Новички должны различать значение этих двух символов.

Вот еще один escape-символ, похожий на ‘\ r’ ‘\ n’: backspace (BS, Backspace) ‘\ b’, как следует из названия, значение этого символа — вернуться на один пробел, здесь нужно специальное напоминание Да: Backspace ‘\ b’ и возврат каретки ‘\ r’ — это просто перемещение курсора и не удаляет предыдущий текст!

Теперь давайте воспользуемся простым кодом, чтобы проверить эффект ‘\ r’ ‘\ n’ ‘\ b’.

(1) Код C:

(2) Код C ++:

(3) Анализ:

Во-первых, давайте посмотрим на первую строку вывода "abc \ r \ ncba \ rrr \ bz \ n":

После вывода abc \ r выполняет возврат каретки к текущей строке, которая является началом первой строки, но не удаляет символы, поэтому в первой строке наконец отображается abc, а затем \ n перемещает курсор на следующую строку. , а затем выводит cba, \ r снова возвращает курсор в начало строки, на этот раз без изменения строки, и напрямую выводит rr. Достигнутый эффект заключается в том, что первые два символа строки cb заменяются на rr и затем \ b перемещает курсор на одну позицию вперед и выводит z, так что первые два r заменяются на z, а затем переносятся, и, наконец, вторая строка показывает, что результат — rza.

Затем, чтобы более интуитивно доказать, что перемещается только курсор без удаления символов, давайте посмотрим на вторую строку кода. «abcd \ b \ b», после двух \ bs курсор перемещается под c (или квадратный курсор на c, или I-образный курсор перед c), чтобы курсор оставался для наблюдения. Мы добавлены getchar () и cin.get ().

Итак, результат после запуска программы будет:

В то же время вы можете видеть, что курсор остается в указанной выше позиции.Конечно, если вы введете символ в это время, c или даже d будут перезаписаны с позиции курсора.

Читать:
Как заблокировать ячейку в эксель не блокируя весь лист

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

Побег персонаж

значимость

Значение кода ASCII (десятичное)

Значение кода ASCII (шестнадцатеричное)

\a

Колокол (BEL)

007

0x07

\b

Backspace (BS), переместить текущую позицию в предыдущий столбец

008

0x08

\f

Подача страницы (FF), переместить текущую позицию в начало следующей страницы

012

0x0C

\n

Перевод строки (LF), переместить текущую позицию в начало следующей строки

010

0x0A

\r

Возврат каретки (CR), переместить текущую позицию в начало этой строки

013

0x0D

\t

Горизонтальная табуляция (HT) (перейти к следующей позиции TAB)

009

0x09

\v

Вертикальная таблица (VT)

011

0x0B

Представляет символ обратной косой черты « \ »

092

0x5C

Представляет собой одинарную кавычку (апостроф).

039

0x27

Представляет символ двойной кавычки

034

0x22

\0

Нулевой символ (NULL)

000

0x00

\ddd

Любой символ, представленный от 1 до 3 восьмеричных чисел.

Трехзначное восьмеричное

\xhh

Любой символ, представленный от 1 до 2 шестнадцатеричных чисел

Что такое возврат каретки, перевод строки и перевод страницы?

Возврат каретки означает возврат к началу текущей строки без продвижения вниз. Название происходит от каретки принтера, поскольку мониторы были редкостью, когда это название было придумано. Это обычно экранируется как «\r», сокращенно CR, и имеет значение ASCII 13 или 0xD.

Перевод строки означает переход вниз к следующей строке; однако он был перепрофилирован и переименован. Используемый как «новая строка», он завершает строки (часто путают с разделяющими строками). Это обычно экранируется как «\n», сокращенно LF или NL, и имеет значение ASCII 10 или 0xA. CRLF (но не CRNL) используется для пары «\r\n».

Подача формы означает переход вниз к следующей «странице». Он обычно использовался в качестве разделителя страниц, но теперь также используется в качестве разделителя разделов. Текстовые редакторы могут использовать этот символ, когда вы «вставляете разрыв страницы». Это обычно экранируется как «\ f», сокращенно FF, и имеет значение ASCII 12 или 0xC.

Как управляющие символы, они могут интерпретироваться по-разному.

Наиболее важной интерпретацией является то, как эти символы разграничивают линии. Строки заканчиваются на NL в Unix (включая OS X), CRLF в Windows и CR на старых компьютерах Mac. Обратите внимание, что изменение значения с LF на NL для одного и того же символа дает различия между Windows и Unix, поэтому многие программы Windows используют CRLF для разделения вместо завершения строки. Многие текстовые редакторы могут читать файлы в любом из этих трех форматов и конвертировать между ними, но не все утилиты могут.

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

Этот день мы приближали, как могли — блокнот в Windows 10 стал понимать юниксовый перевод строки

Notepad в windows 10 начал понимать юниксовый перевод строки, а не только формат Windows.

С проблемой «каши» вместо удобочитаемого текста десятилетиями сталкивались те, кто пытался открыть в среде Windows текстовые документы, подготовленные на других операционных системах. Теперь же всё в одночасье изменяется. И это изменение столь же мало, сколь и эпично по своим практическим результатам и идеологическим последствиям. Microsoft вновь пытается играть в кросс-интеграцию и поддержку открытых стандартов.

Долгие годы Windows Блокнот мог нормально отображать только те текстовые документы, которые содержали символы начала новой строки в формате Windows End of Line (EOL) — «возврат каретки» (CR) и «подача на строку» (LF). На деле это приводило к тому, что Notepad не смог правильно отобразить содержимое текстовых файлов, созданных в Unix, Linux и macOS, где в качестве признака конца строки использовался только символ LF.

Например, вот скриншот Notepad, пытающегося отобразить содержимое текстового файла Linux .bashrc, который содержит только символы Unix LF EOL:

image

А вот скриншот недавно обновленного «Блокнота», отображающего содержимое того же самого файла UNIX / Linux .bashrc, но с правильными переносами:

image
Обратите внимание, что строка состояния указывает обнаруженный формат EOL текущего открытого файла.

Так же для гибкого управления новой возможностью в разделе реестра [HKEY_CURRENT_USER\Software\Microsoft\Notepad] вводятся два дополнительных ключа:

image

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

Что мы можем узнать о проблеме из Википедии

Исторически на механических пишущих машинках был рычаг, который возвращал каретку к левому краю страницы и прокручивал вал, подвигая бумагу вверх на строку. На телетайпах и более поздних алфавитно-цифровых печатающих устройствах (АЦПУ) вместо каретки была головка, в лазерных принтерах она перестала быть материальной, но в термине возврат каретки всё это продолжали называть кареткой, чтобы его не менять. На телетайпах возврат каретки и подачу строки разделили, откуда традиция представления перевода строки как CR+LF перешла и к текстовым файлам.

Системы, основанные на ASCII или совместимом наборе символов, используют или LF (перевод строки, 0x0A), или CR (возврат каретки, 0x0D) по отдельности, или последовательность CR+LF. Эти названия основаны на командах принтера: перевод строки означает, что одна строка на бумаге должна быть перенесена при печати, а возврат каретки означает, что каретка печатающего устройства должна вернуться к началу текущей строки.

  • CR (ASCII 0x0D) использовался в 8-битовых машинах Commodore, машинах TRS-80, Apple II, системах Mac OS до версии 9 и OS-9;
  • LF (ASCII 0x0A) используется в Multics, UNIX, UNIX-подобных операционных системах (GNU/Linux, AIX, Xenix, Mac OS X, FreeBSD), BeOS, Amiga UNIX, RISC OS и других;
  • CR+LF (ASCII 0x0D 0x0A) используется в DEC RT-11 и большинстве других ранних не-UNIX- и не-IBM-систем, а также в CP/M, MP/M, MS-DOS, OS/2, Microsoft Windows, Symbian OS, протоколах Интернет.
  • LF (U+000A): англ. line feed — подача строки <ПС>;
  • CR (U+000D): англ. carriage return — возврат каретки <ВК>;
  • NEL (U+0085): англ. next line — переход на следующую строку;
  • LS (U+2028): англ. line separator — разделитель строк;
  • PS (U+2029): англ. paragraph separator — разделитель абзацев.

Но как известно, стандарты стандартами, а реализации у всех часто выходят разными. И масла в огонь подливает необходимость корректно отображать унаследованные документы, созданные до эпохи юникода. Отсутствие единого общепринятого представления перевода строки в разных операционных системах надолго осложнило обмен текстовыми данными между ними.

Юникод старается примирить эту разницу, уравнивая CR, LF и CR+LF, однако вступает в противоречие с наследуемым им ASCII при трактовке последовательности LF+CR, не предварённой CR: согласно ASCII это один перевод строки, а согласно Юникоду — два.

Похожие статьи