Diferencia entre y ?


¿Cuál es la diferencia entre \n (nueva línea) y \r (retorno de carro)?

En particular, ¿existen diferencias prácticas entre \n y \r? ¿Hay lugares donde se debe usar uno en lugar del otro?

Author: TRiG, 2009-11-19

8 answers

En términos de código ascii, es 3 since ya que son 10 y 13 respectivamente;-).

Pero en serio, hay muchos:

  • en Unix y todos los sistemas similares a Unix, \n es el código para end-of-line, \r no significa nada especial
  • como consecuencia, en C y la mayoría de los lenguajes que de alguna manera lo copian (incluso remotamente), \n es la secuencia de escape estándar para fin de línea (traducida a/desde secuencias específicas del sistema operativo según sea necesario)
  • en sistemas Mac antiguos (pre-OS X), \r era el código para end-of-line instead
  • en Windows (y muchos OSs antiguos), el código para el final de línea es de 2 caracteres, \r\n, en este orden
  • como una consecuencia (sorprendente; -) (que se remonta a OSs mucho más antiguo que Windows), \r\n es la terminación de línea estándar para formatos de texto en Internet
  • para "terminales" electromecánicos tipo teletipo, \r ordena al carro que retroceda hacia la izquierda hasta que llegue a la parada más a la izquierda (una operación lenta), \n ordena al rodillo que ruede subir una línea (una operación mucho más rápida ) that esa es la razón por la que siempre tienes \r antes \n, ¡para que el rodillo pueda moverse mientras el carro todavía va hacia la izquierda!- ) Wikipedia tiene una explicación más detallada.
  • para los terminales de modo de caracteres (típicamente emulando los de impresión aún más antiguos como los anteriores), en modo raw, \r y \n actúan de manera similar (excepto ambos en términos del cursor, ya que no hay ningún carro o rodillo; -)

En la práctica, en el contexto moderno de escribir en un archivo de texto, siempre debe usar \n (el tiempo de ejecución subyacente lo traducirá si está en un sistema operativo extraño, por ejemplo, Windows;-). La única razón para usar \r es si estás escribiendo en un terminal de caracteres (o más probablemente en una" ventana de consola " que lo emula) y quieres que la siguiente línea que escribes sobreescriba la última que acabas de escribir ( a veces se usa para efectos de "animación ascii" tontos de, por ejemplo, barras de progreso) this esto se está volviendo bastante obsoleto en un mundo de GUI, aunque;-).

 653
Author: Alex Martelli,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-08-26 10:44:19

Históricamente un \n fue utilizado para mover el carro hacia abajo, mientras que el \r se utiliza para mover el carro hacia el lado izquierdo de la página.

 104
Author: tster,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-05-06 21:23:01

Dos caracteres diferentes.

\n se utiliza como terminador de final de línea en archivos de texto Unix

\r se utiliza como un terminador de final de línea en archivos de texto de Mac

\r\n (ie ambos) se utilizan para terminar las líneas en archivos de texto de Windows y DOS.

 27
Author: pavium,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-10-19 04:56:07

Ya que nadie más lo mencionó específicamente (¿son demasiado jóvenes para saber/recordar?)- Sospecho que el uso de \r\n se originó para máquinas de escribir y dispositivos similares.

Cuando se quería una nueva línea mientras se usaba una máquina de escribir compatible con varias líneas, había dos acciones físicas que tenía que realizar: deslizar el carro de nuevo al principio (a la izquierda, en NOSOTROS) de la página, y alimentar el papel hasta una muesca.

En los días de las impresoras de línea, la única manera de hacer texto en negrita, por ejemplo, era haga un retorno de carro SIN una nueva línea e imprima los mismos caracteres sobre los antiguos, agregando así más tinta, haciendo que parezca más oscuro (en negrita). Cuando la función mecánica de "nueva línea" fallaba en una máquina de escribir, este era el resultado molesto: podía escribir sobre la línea de texto anterior si no estaba prestando atención.

 17
Author: nothingisnecessary,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-01-20 20:29:56

Dos caracteres diferentes para diferentes sistemas operativos. También esto juega un papel en los datos transmitidos a través de TCP/IP que requiere el uso de \r\n.

\n Unix

\r Mac

\r\n Windows y DOS.

 11
Author: a432511,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-04-16 18:51:48

Para completar,

En un script de shell (bash), puede usar \r para enviar el cursor, en front on line y, por supuesto, \n para poner el cursor en una nueva línea.

Por ejemplo, intente:

echo -en "AA--AA" ; echo -en "BB" ; echo -en "\rBB"
  • La primera pantalla "echo" AA--AA
  • El segundo: AA--AABB
  • El último: BB--AABB

Pero no olvide usar -en como parámetros.

 7
Author: Akarun,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-01-30 10:31:29

En Windows, \n se mueve al principio de la siguiente línea. \r se mueve al principio de la línea actual, sin moverse a la siguiente línea. He usado \r en mis propias aplicaciones de consola donde estoy probando algún código y no quiero ver el texto desplazándose hacia arriba en mi pantalla, así que en lugar de usar \n después de imprimir algún texto, por ejemplo, una velocidad de fotogramas (FPS), imprimiré f ("%- 10d\r", fps); Esto devolverá el cursor al principio de la línea sin moverse a la siguiente línea y me permitirá tener otra información en la pantalla que no se desplace mientras la velocidad de fotogramas se actualiza constantemente en la misma línea (el %-10 se asegura de que la salida sea de al menos 10 caracteres, justificado a la izquierda por lo que termina rellenado por espacios, sobrescribiendo cualquier valor antiguo para esa línea). Es bastante útil para cosas como esta, por lo general cuando tengo la salida de cosas de depuración a la pantalla de mi consola.

Un poco de historia

El /r significa "retorno " o" retorno de carro " que debe su historia a la máquina de escribir. Un retorno de carro movió su carro todo el camino a la derecha por lo que estaba escribiendo al comienzo de la línea.

El /n significa "nueva línea", de nuevo, de los días de máquina de escribir que se trasladó a una nueva línea. No nessecarily al principio de él sin embargo, que es porqué algunos sistemas operativos adoptaron la necesidad de ambos retorno de a /r seguido por a /n nueva línea, como ese era el orden que una máquina de escribir lo hizo en. También explica las viejas computadoras de 8 bits que solían tener "Retorno" en lugar de "Enter", de "carriage return", que era familiar.

 3
Author: Neil Roy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-29 18:24:55
#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();

}

Vamos a tomar este ejemplo tratar de poner \n en lugar de \r no va a funcionar y tratar de adivinar por qué?

 0
Author: karthik gorijavolu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-03-10 00:49:42