Разница между \ n и \ r?

В чем разница между \n (newline) и \r (возврат каретки)?

В частности, существуют ли какие-либо практические различия между \n и \r ? Есть ли места, где нужно использовать вместо другого?

    В терминах ascii-кода это 3 – так как они составляют 10 и 13 соответственно ;-).

    Но серьезно, их много:

    • в Unix и во всех Unix-подобных системах \n – это код для конца строки, \r означает ничего специального
    • как следствие, в C и большинстве языков, которые каким-то образом копируют его (даже удаленно), \n – стандартная escape-последовательность для конца строки (при необходимости переводится в / из OS-специфических последовательностей)
    • в старых системах Mac (pre-OS X), \r был кодом для конца строки вместо
    • в Windows (и многих старых ОС) код для конца строки – 2 символа, \r\n , в этом порядке
    • как (неожиданное 😉 следствие (возврат к ОС намного старше Windows), \r\n – стандартное прерывание строки для текстовых форматов в Интернете
    • для электромеханических телетайпоподобных терминалов \r передает карету назад влево, пока она не попадает в крайнюю левую остановку (медленная операция), \n приводит к тому, что ролик скатывается на одну линию (гораздо более быстрая операция) – это причина, по которой у вас всегда есть \r до \n , так что ролик может двигаться, пока карета все еще идет влево! -) В Википедии есть более подробное объяснение .
    • для терминалов с символьным режимом (как правило, эмулируя еще более старые печатные, как описано выше), в сыром режиме \r и \n действуют аналогично (за исключением как с точки зрения курсора, так и без каретки или ролика 😉

    На практике, в современном контексте записи в текстовый файл, вы всегда должны использовать \n (базовая среда выполнения переведет это, если вы находитесь в странной ОС, например Windows ;-). Единственная причина использовать \r – это если вы пишете на символьный терминал (или, скорее, «консольное окно», эмулирующее его) и хотите, чтобы следующая строка, которую вы пишете, перезаписывала последний, который вы только что написали (иногда используется для goofy) ascii анимация “эффектов, например, баров прогресса) – это становится довольно устаревшим в мире GUI, хотя ;-).

    Исторически a \n использовался для перемещения каретки вниз, в то время как \r использовался для перемещения каретки назад в левую часть страницы.

    Два разных персонажа.

    \n используется в качестве концевого терминатора в текстовых файлах Unix

    \r используется в качестве терминатора конца строки в текстовых файлах Mac

    \r\n (т.е. оба) используются для завершения строк в текстовых файлах Windows и DOS.

    Поскольку никто не упомянул об этом конкретно (они слишком молоды, чтобы знать / помнить?) – я подозреваю, что использование \r\n создано для пишущих машинок и подобных устройств.

    Когда вам нужна новая строка при использовании пишущей машинки с несколькими линиями, ей необходимо выполнить два физических действия: сдвиньте каретку до начала (слева, в США) страницы и загрузите бумагу на одну ступеньку ,

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

    Два разных символа для разных операционных систем. Также это играет роль в данных, передаваемых по TCP/IP что требует использования \r\n .

    \n Unix

    \r Mac

    \r\n Windows и DOS.

    Завершить,

    В сценарии оболочки (bash) вы можете использовать \r для отправки курсора в строке в строке и, конечно, \n чтобы поместить курсор в новую строку.

    Например, попробуйте:

     echo -en "AA--AA" ; echo -en "BB" ; echo -en "\rBB" 
    • Первый «эхо-дисплей» AA--AA
    • Второй: AA--AABB
    • Последнее: BB--AABB

    Но не забудьте использовать -en как параметры.

    В windowsх \ n перемещается в начало следующей строки. \ R перемещается в начало текущей строки, не переходя к следующей строке. Я использовал \ r в своих консольных приложениях, где я тестирую некоторый код, и я не хочу видеть текст, прокручивающий мой экран, поэтому вместо использования \ n после печати какого-либо текста, скажем, частоты кадров ( FPS), я буду печатать f (“% – 10d \ r”, fps); Это вернет курсор в начало строки, не перейдя к следующей строке, и позвольте мне иметь другую информацию на экране, которая не будет прокручиваться, а частота кадров постоянно обновляется в той же строке (% -10 делает определенный результат составляет не менее 10 символов, выравнивается по левому краю, поэтому он заканчивается пробелами, переписывая любые старые значения для этой строки). Это довольно удобно для таких вещей, как правило, когда я отлаживаю материал на экране консоли.

    Немного истории

    Обозначение / r означает «возврат» или «возврат каретки», который обязан его истории пишущей машинке. Возврат каретки перемещал вашу каретку до упора вправо, так что вы печатали в начале строки.

    / N означает «новая строка», опять же, с пишущей машинки, которую вы переместили на новую строку. Не обязательно для начала, хотя, поэтому, некоторые операционные системы приняли потребность в возврате a / r, за которым следовала / n новая строка, так как это был порядок, на котором написала пишущая машинка. Он также объясняет старые 8-битные компьютеры, которые использовали иметь «Возврат», а не «Ввод», из «возврата каретки», который был знаком.

     #include  void main() { int countch=0; int countwd=1; printf("Enter your sentence in lowercase: "); char ch='a'; while(ch!='\r') { ch=getche(); if(ch==' ') countwd++; else countch++; } printf("\n Words = ",countwd); printf("Characters = ",countch-1); getch(); } в #include  void main() { int countch=0; int countwd=1; printf("Enter your sentence in lowercase: "); char ch='a'; while(ch!='\r') { ch=getche(); if(ch==' ') countwd++; else countch++; } printf("\n Words = ",countwd); printf("Characters = ",countch-1); getch(); } 

    давайте возьмем этот пример, попробуем положить \ n вместо \ r, он не сработает и попытается угадать, почему?

    Interesting Posts

    Ограничения имен переменных в R

    Создание API для мобильных приложений – Аутентификация и авторизация

    CSS: установить фоновое изображение с непрозрачностью?

    Будет ли возможно обновление с Windows 8 Release Preview до версии RTM?

    Android NDK учебник / руководство для начинающих.

    Не удается увидеть окно PuTTY в Windows Vista

    Фиксация сеанса в ASP.NET

    Как установить цвета пули в списки UL / LI html через CSS без использования каких-либо изображений или тегов span

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

    Получение десугатной части выражения Scala для / понимания?

    ‘transform3d’ не работает с позицией: фиксированные дети

    Утилизировать или перерабатывать жесткий диск

    Используя Rails, как я могу установить свой первичный ключ, чтобы он не был столбцом с целым типом?

    Как установить длинный путь Java classpath в Windows?

    Найти метрику подобия между двумя строками

    Давайте будем гением компьютера.