В чем смысл следующих управляющих символов:
-
Возврат каретки
-
Линейный канал
-
Подача формы
В чем смысл следующих управляющих символов:
Возврат каретки
Линейный канал
Подача формы
Возврат каретки означает возврат к началу текущей строки без перехода вниз. Название происходит от каретки принтера, поскольку мониторы были редки, когда имя было придумано. Обычно это экранируется как "\ r", сокращенно CR и имеет значение ASCII 13 или 0x0D.
Linefeed означает переход вниз к следующей строке; однако он был переименован и переименован. Используется как "новая строка", он завершает линии (обычно путают с разделительными линиями). Это обычно экранируется как "\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) или на начало или конец файла.
\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
\f
используется для разрыва страницы.
Вы не видите никакого эффекта в консоли. Но когда вы используете эту константу символа в своем файле, вы можете увидеть разницу.
Другим примером является то, что если вы можете перенаправить свой вывод в файл, вам не нужно писать файл или использовать обработку файлов.
Для ex:
Запишите этот код в С++
void main()
{
clrscr();
cout<<"helloooooo" ;
cout<<"\f";
cout<<"hiiiii" ;
}
и при компиляции он генерирует exe (например, abc.exe
)
то вы можете перенаправить свой вывод в файл, используя это:
abc > xyz.doc
затем откройте файл xyz.doc
, вы увидите фактический разрыв страницы между hellooo и hiiii....
Посмотрите Wikipedia:
Системы, основанные на ASCII или совместимом наборе символов, используют либо LF (Line feed, '\n', 0x0A, 10 в десятичной форме), либо CR (возврат каретки, '\ r', 0x0D, 13 в десятичной системе) по отдельности или CR, затем LF (CR + LF, 0x0D 0x0A). Эти символы основаны на командах принтера: в строке питания указано, что одна строка бумаги должна выходить из принтера, а возврат каретки указывает, что каретка принтера должна вернуться к началу текущей строки.
Помимо вышеприведенной информации, существует еще интересная история LF (\n) и CR (\ r). [Оригинальный автор: 阮一峰 Источник: http://www.ruanyifeng.com/blog/2006/04/post_213.html] Перед выходом компьютера появился тип телеприемника Teletype Model 33. Он может печатать 10 символов каждую секунду. Но есть одна проблема с этим, после окончания печати каждой строки потребуется 2 секунды, чтобы перейти к следующей строке, на которой печатается 2 символа. Если в течение этой 0,2 секунды будут перенесены новые символы, этот новый символ будет потерян.
Таким образом, ученые нашли способ решить эту проблему, после каждой строки они добавили два конечных символа, один из которых - "Возврат каретки", который должен сообщить принтеру, что печатающая головка слева; другой - "Линейный канал", он сообщает принтеру, чтобы он переместил бумагу на 1 строку.
Позже, компьютер стал популярным, эти два понятия используются на компьютерах. В то время устройство хранения было очень дорогим, поэтому некоторые ученые сказали, что было очень дорого добавить два символа в конце каждой строки, одного достаточно, поэтому есть некоторые аргументы в отношении того, какой из них использовать.
В UNIX/Mac и Linux в конце каждой строки помещается '\n', в Windows в конце каждой строки помещается '\ r\n'. Следствием этого использования является то, что файлы в UNIX/Mac будут отображаться в одной строке, если они открыты в Windows. Хотя файл в Windows будет иметь один ^ М в конце каждой строки, если он открыт в UNIX или Mac.
На старых терминалах для печати бумаги переход к следующей строке включает в себя два действия: перемещение печатающей головки обратно в начало диапазона горизонтальной развертки (возврат каретки) и продвижение рулона бумаги, на которую печатается (линия подачи).
Поскольку мы больше не используем терминалы для печати бумаги, эти действия больше не актуальны, но символы, используемые для их обозначения, застряли в разных воплощениях.
Рассмотрим принтер с ударным эффектом IBM 1403. CR переместила печатающую головку в начало линии, но НЕ продвигала бумагу. Это позволило сделать "надпечатку", поставив несколько строк вывода на одну строку. Такие вещи, как подчеркивание, были достигнуты таким же образом, как и печать BOLD. LF выдвинул бумагу на одну строку. Если CR не было, следующая строка будет печататься как шаг в шахматном порядке, потому что LF не перемещает печатающую головку. FF перевел бумагу на следующую страницу. Обычно он также перемещал печатающую головку в начало первой строки на новой странице, но для этого может потребоваться CR. Разумеется, большинство программистов кодировали CRFF вместо CRLF в конце последней строки на странице, потому что дополнительный CR, созданный FF, не имеет значения.
Возврат каретки и подача линии также являются ссылками на пишущие машинки, поскольку при небольшом нажатии на ручку на левой стороне каретки (место, где идет бумага) бумага будет вращать небольшое количество вокруг цилиндра, продвигая документ на одну строку. Если вы закончили набирать одну строку и хотели продолжить переход к следующему, вы толкнули сильнее, продвигаясь по линии и передвигая каретку до упора вправо, а затем снова набираете текст слева направо, когда каретка перемещается с каждым нажатием клавиши, Излишне говорить, что слово-обертка была значением по умолчанию для всей текстовой обработки эпохи. Р: D
В качестве дополнения,
1, Возврат каретки. Это терминология принтера, означающая изменение местоположения печати в начале строки current. В компьютерном мире это означает возврат к началу текущей строки в большинстве случаев, но редко обозначает новую строку.
2, Линейный канал. Это терминология принтера, означающая продвижение бумаги на одну строку. Поэтому возврат каретки и подача линии используются вместе для начала печати в начале новой строки. В мире компьютеров он обычно имеет то же значение, что и в новой строке.
3, Подача фида. Это терминология принтера, мне нравится объяснение в этой теме.
Если вы программировали принтер в стиле 1980-х годов, он бумагу и начать новую страницу. Вы почти наверняка никогда не нуждаетесь он.
Это почти устарело, и вы можете обратиться к 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: Commodore 8-битные машины, Acorn BBC, ZX Spectrum, TRS-80, Apple II, Oberon, классическая Mac OS до версии 9, MIT LispМашина и OS-9
Реализация RS: QNX pre-POSIX
0x9B: 8-разрядные машины Atari с использованием варианта ATASCII ASCII (155 в десятичное)
CR + LF: Microsoft Windows, DOS (MS-DOS, ПК 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 загружают текстовый вывод.
"\n" - символ перевода строки. Это означает, что конец текущей строки и перейти к новой строке для всех, кто ее читает.
Это непечатаемые символы, относящиеся к понятию "новая строка". \n - перевод строки. \r - возврат каретки. На разных платформах они имеют разные значения относительно действительной новой строки. В Windows новая строка -\r\n. В linux\n. В mac,\r.
На практике вы помещаете их в любую строку, и это повлияет на распечатку строки.