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



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



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

712   8  

8 ответов:

С точки зрения кода ascii, это 3 - так как они 10 и 13 соответственно;-).

а если серьезно, то есть много:

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

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

исторически 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), я буду печатать ("%- 10d\r", fps); это вернет курсор в начало строки, не переходя к следующей строке, и позволит мне чтобы иметь другую информацию на экране, которая не прокручивается, в то время как частота кадров постоянно обновляется на одной и той же строке (%-10 гарантирует, что выход составляет не менее 10 символов, выравнивается по левому краю, поэтому он заканчивается пробелами, перезаписывая любые старые значения для этой строки). Это довольно удобно для таких вещей, как правило, когда у меня есть отладочный вывод на экран консоли.

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

В /Р расшифровывается как "возвращение" или "возврат каретки" который обязан своей историей пишущей машинке. Возврат каретки переместил вашу карету полностью вправо, чтобы вы печатали в начале строки.

/n означает "новая строка", опять же, от дней пишущей машинки вы перешли к новой строке. Не обязательно к началу этого, хотя, именно поэтому некоторые ОС приняли необходимость как A /r return, так и A / n newline, поскольку это был порядок, в котором это делала пишущая машинка. Это также объясняет старые 8-битные компьютеры, которые раньше имели "Return "вместо" Enter", от" carriage return", который был знаком.

#include <stdio.h>

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 он не будет работать и попытаться угадать, почему?

Comments

    Ничего не найдено.