Что такое возврат каретки, перевод строки и подача формы? - PullRequest
442 голосов
/ 22 июня 2010

Что означают следующие управляющие символы:

  1. Возврат каретки

  2. Перевод строки

  3. Форма подачи

Ответы [ 11 ]

569 голосов
/ 23 июня 2010

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

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

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

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

Подача формы немного более интересна (хотя и используется реже напрямую), и с обычным определением разделителя страниц она может находиться только между строками (например, после последовательности новой строкиNL, CRLF или CR) или в начале или конце файла.

101 голосов
/ 13 февраля 2016

\r - возврат каретки и перемещает курсор назад, как если бы я сделал-

printf("stackoverflow\rnine")
ninekoverflow

означает, что он переместил курсор в начало «stackoverflow» и перезаписывает начальные четыре символа, поскольку «девять» имеет длину четыре символа.

\n - это символ новой строки, который меняет строку и переводит курсор в начало новой строки, например: *

printf("stackoverflow\nnine")
stackoverflow
nine

\f является подачей формы, его использование устарело, но оно используется для создания отступов, как

printf("stackoverflow\fnine")
stackoverflow
             nine

если я напишу как-

printf("stackoverflow\fnine\fgreat")
stackoverflow
             nine
                 great
24 голосов
/ 20 мая 2013

\f используется для разрыва страницы.Вы не можете видеть никакого эффекта в консоли.Но когда вы используете эту символьную константу в своем файле, вы можете увидеть разницу.

Другой пример: если вы можете перенаправить вывод в файл, вам не нужно писать файл или использовать обработку файла.

Например:

Напишите этот код на языке c ++

void main()    
{
    clrscr();
    cout<<"helloooooo" ;

    cout<<"\f";
    cout<<"hiiiii" ;

}

, и когда вы его скомпилируете, он сгенерирует исполняемый файл (например, abc.exe)

, затем вы можете перенаправить вывод в файл, используя это:

abc > xyz.doc

, затем откройте файл xyz.doc, вы можете увидеть фактический разрыв страницы между hellooo иhiiii ....

24 голосов
/ 22 июня 2010

Взгляните на Википедию :

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

21 голосов
/ 09 июля 2015

Помимо вышеупомянутой информации, есть еще интересная история LF (\ n) и CR (\ r).[Оригинальный автор: 阮一峰 Источник: http://www.ruanyifeng.com/blog/2006/04/post_213.html] До выхода компьютера существовал тип телепринтера под названием Teletype Model 33. Он может печатать 10 символов каждую секунду.Но есть одна проблема с этим: после завершения печати каждой строки, потребуется 0,2 секунды, чтобы перейти к следующей строке, то есть время печати 2 символов.Если в течение этих 0,2 секунды будут переданы новые символы, то этот новый символ будет утерян.

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

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

В UNIX / Mac и Linux '\ n' ставится в конце каждой строки, в Windows '\ r \ n' ставится в конце каждой строки.Следствием этого использования является то, что файлы в UNIX / Mac будут отображаться в одну строку, если они открыты в Windows.В то время как файл в Windows будет иметь один ^ M в конце каждой строки, если он открыт в UNIX или Mac.

18 голосов
/ 22 июня 2010

На старых терминалах для бумаги и принтера переход на следующую строку включал два действия: перемещение печатающей головки обратно в начало диапазона горизонтального сканирования (возврат каретки) и перемещение рулона бумаги, на котором производится печать (перевод строки).

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

10 голосов
/ 05 февраля 2014

Рассмотрим ударный принтер IBM 1403. CR переместил печатающую головку в начало линии, но НЕ продвигал бумагу. Это позволило «наложить», разместив несколько строк вывода на одной строке. Такие вещи, как подчеркивание, были достигнуты таким же образом, как и BOLD print. Л.Ф. продвинул бумагу на одну строку. Если бы не было CR, следующая строка была бы напечатана как ступенчатый шаг, потому что LF не двигал печатающую головку. Ф.Ф. продвинул статью на следующую страницу. Обычно она также перемещает печатающую головку в начало первой строки на новой странице, но для этого вам может потребоваться CR. Конечно, большинство программистов закодировали CRFF вместо CRLF в конце последней строки на странице, поскольку дополнительный CR, созданный FF, не имел бы значения.

8 голосов
/ 18 октября 2016

В качестве дополнения,

1, Возврат каретки : это терминология принтера, означающая изменение местоположения печати на начало текущей строки. В компьютерном мире это означает в большинстве случаев возврат к началу текущей строки, но редко означает новую строку.

2, Перевод строки : это терминология принтера, означающая продвижение бумаги на одну строку. Таким образом, возврат каретки и перевод строки используются вместе для начала печати в начале новой строки. В компьютерном мире это обычно имеет то же значение, что и перевод строки.

3, Подача формы : это терминология принтера, мне нравится объяснение в этой теме .

Если бы вы программировали для принтера в стиле 1980-х годов, он бы бумаги и начать новую страницу. Вы практически наверняка никогда не будете нуждаться это.

http://en.wikipedia.org/wiki/Form_feed

Это почти устарело, и вы можете обратиться к Escape-последовательность \ f - подача формы - что это такое? для подробного объяснения.

Обратите внимание, что мы можем использовать CR или LF или CRLF для обозначения новой строки на некоторых платформах, но новая строка не может быть принята ими на некоторых других платформах. Подробнее см. вики Newline .

LF: Multics, Unix и Unix-подобные системы (Linux, OS X, FreeBSD, AIX, Xenix и др.), BeOS, Amiga, RISC OS и др.

CR: Commodore 8-битные машины, Acorn BBC, ZX Spectrum, TRS-80, Apple II семейство, Оберон, классическая Mac OS до версии 9, MIT Lisp Машина и ОС-9

RS: QNX pre-POSIX реализация

0x9B: 8-разрядные машины Atari, использующие вариант ASCII ATASCII (155 дюймов десятичное)

CR + LF: Microsoft Windows, DOS (MS-DOS, PC DOS и т. Д.), DEC TOPS-10, RT-11, CP / M, MP / M, Atari TOS, OS / 2, Symbian OS, Palm OS, Amstrad CPC, и большинство других ранних версий не-Unix и не-IBM

LF + CR: Вывод из буфера Acorn BBC и RISC OS.

3 голосов
/ 19 января 2014

Возврат каретки и перевод строки также являются ссылками на пишущие машинки, так как при небольшом нажатии на ручку на левой стороне каретки (место, куда идет бумага), бумага будет вращаться на небольшое количество вокруг цилиндра, продвигая документ одной строкой.Если вы закончили печатать одну строку и хотели перейти к следующей, вы нажимали сильнее, продвигая линию и сдвигая каретку до упора вправо, затем возобновляя ввод слева направо, когда каретка перемещалась при каждом нажатии клавиши,Излишне говорить, что перенос слов был настройкой по умолчанию для всей текстовой обработки эпохи.P: D

3 голосов
/ 22 июня 2010

"\ n" - символ перевода строки. Это означает конец текущей строки и переход к новой строке для всех, кто ее читает.

...