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

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

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

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

  3. Подача формы


person ashna    schedule 22.06.2010    source источник
comment
Что означает возврат каретки? Я не вижу возврата кареты на моем ноутбуке. : s   -  person Jean Hominal    schedule 22.06.2010
comment
@JeanHominal каретка в основном означает курсор (или указатель в древних пишущих машинках), а return означает возврат в начало этой строки.   -  person SOFe    schedule 09.08.2016
comment
Я не вижу оконечных проводов (или каких-либо оконных стекол, если на то пошло) в моем окне терминала, а также нет телетайпа, прикрепленного к / dev / tty1. Все они стали метафорами.   -  person Piskvor left the building    schedule 26.03.2019


Ответы (12)


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

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

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


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

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

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

person Community    schedule 23.06.2010
comment
Я могу подтвердить, что OS X использует NL в качестве ограничителя строки, как и Unix (поскольку OS X является Unix). CR использовался в Mac OS 9 и более ранних версиях. - person Rory O'Kane; 16.08.2013
comment
Символ FF сегодня может показаться странным (вместе с символом звонка CTRL-G), но он имел большую актуальность, когда видеодисплеи были гораздо менее распространены, а терминалы с бумажными копиями использовались в качестве дисплеев данных. - person Rick Sarvas; 27.11.2013
comment
Разве это не контроль подачи \x0c? - person Tjorriemorrie; 01.07.2015
comment
Я не знаю истории компьютеров Mac, использующих CR. Вероятно, это пришло из Apple II с использованием CR. CR был распространен и на других 8-битных системах, таких как Commodore и Tandy. ASCII не был универсальным в этих системах: Commodore использовал PETSCII, у которого LF был равен 0x8d (!). У Atari вообще не было персонажа LF. По какой-то причине CR = 0x0d был более или менее стандартным. - person Ssswift; 18.10.2017
comment
Возможно, стоит отметить, что некоторые программы на самом деле действительно рассматривают символы окончания строки как разделители вместо терминаторов, хотя единственное, что я могу придумать В первую очередь у меня в голове редактор Ace, который позволит вам сохранить файл без конца строки. С другой стороны, редактор Nano всегда будет добавлять конец строки, а сценарий Bash не будет читать строку в конце файла, если у него нет завершающей новой строки. - person wjandrea; 31.12.2020
comment
Также ... * возврат каретки = Ctrl-M или ^M * перевод строки = Ctrl-J или ^J * form feed = Ctrl-L или ^L См. Здесь. - person Bálint Sass; 26.02.2021

\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
person user3346547    schedule 13.02.2016
comment
Но этот пример не работает на языках высокого уровня! - person Mohammad Sina Karvandi; 27.10.2016
comment
@ ᔕI ᑎᗩ Kᗩᖇ ᐯᗩᑎᗪ Да: по крайней мере, вы можете сделать то же самое в оболочке Linux, используя printf утилиту от coreutils. Или даже использовать echo -en, который является встроенным в bash. - person Ruslan; 10.05.2017
comment
Как передать все строки как одну строку в файле? - person Paras Singh; 19.01.2018
comment
Подача страницы не используется для отступов. Если вы отправите несколько из них на принтер, он выплюнет бумагу. То, что вы описали как \f, на самом деле \v - вертикальная вкладка, при условии, что обе они выглядят одинаково в консоли. - person cprn; 09.01.2019
comment
printf("123\f456\f789"); показывает / ›‹bold› 123456789 ‹/bold› на консоли. - person Mayur; 27.02.2019

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

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

person tanascius    schedule 22.06.2010

Вкратце:

Возврат каретки (\r или 0xD): для управления началом той же строки.

Line_Feed (\n или 0xA): взять под контроль начало следующей строки.

form_feed (\f или 0xC): для управления началом следующей страницы.

person Ritik Kamboj    schedule 15.01.2020
comment
Такой краткий ответ следует поощрять. - person user5280911; 26.01.2020
comment
Краткие ответы изящны только в некоторых областях, например в математике. Windows использует оба 0x0A 0x0D, и это произвольный выбор. Эти концепции не являются автономными, поэтому краткие ответы не подходят в этих ситуациях. - person eigenfield; 03.12.2020
comment
@ user5280911 да, хотя представление более подробной информации после объяснения также может быть полезно, особенно в таком случае, когда есть другие детали, которые следует учитывать - person Reid Moffat; 12.07.2021

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

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

Например:

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

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

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

}

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

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

abc > xyz.doc

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

person Balram Dixit    schedule 20.05.2013

Помимо приведенной выше информации, есть еще интересная история 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.

person wxie    schedule 09.07.2015
comment
С выпуском OSX (на основе BSD unix) Mac перешел на '\ n' - окончания строк Unix. - person Jonathan Cross; 19.03.2016
comment
Файлы в UNIX / Mac будут отображаться в одной строке, если они открыты в Windows. WRITE.EXE (он же Wordpad) может их отображать нормально. - person thecarpy; 08.12.2017
comment
CR и LF разделились примерно за 50 лет до Teletype Model 33: см. citeseerx.ist.psu.edu/viewdoc/ - person Artyom Skrobov; 16.01.2021

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

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

person Amber    schedule 22.06.2010
comment
Фактически «возврат каретки» не перемещает печатающую головку влево, а перемещает каретку, которая удерживает валик, вправо. Раньше для этого использовался длинный рычаг, который приводился в действие левой рукой. См. en.wikipedia.org/wiki/Typewriter. - person Mark Lakata; 07.11.2012
comment
@MarkLakata Верно для пишущих машинок, но этот ответ касается старых печатных терминалов. Например, DEC LA36 (columbia.edu/cu/computinghistory/la36.html). - person Peter Cardona; 24.08.2013

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

person Dick Guertin    schedule 05.02.2014
comment
Это единственный ответ, который полностью объясняет значение возврата каретки. - person Lee; 13.08.2019
comment
@ Ли согласился. Исторические причины того, почему существуют эти управляющие символы, так же важны, как и то, что они делают. - person r a; 17.08.2020

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

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

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

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

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

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

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

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

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

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

RS: реализация QNX до 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.

person Eugene    schedule 18.10.2016

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

person vpit3833    schedule 22.06.2010

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

person TheLastWordSword    schedule 18.01.2014

Это непечатаемые символы, относящиеся к концепции «новой строки». \ n перевод строки. \ r - возврат каретки. На разных платформах они имеют разное значение относительно действующей новой строки. В Windows новая строка - \ r \ n. В Linux: \ n. В Mac \ r.

На практике вы помещаете их в любую строку, и это повлияет на распечатку строки.

person Palantir    schedule 22.06.2010