¿Qué son el retorno de carro, salto de línea y avance de formulario?

501

¿Cuál es el significado de los siguientes caracteres de control:

  1. Retorno de carro

  2. Linea de alimentación

  3. Alimentación de formulario

ashna
fuente
14
¿Qué significa "retorno de carro"? No veo ningún "carro" "regresando" en mi computadora portátil. : s
Jean Hominal
12
@JeanHominal el carro básicamente significa el cursor (o el puntero en máquinas de escribir antiguas), y return significa regresar al comienzo de esa línea.
SOFe
No veo ningún cable terminado (ni ningún panel de vidrio para ese asunto) en mi "ventana" de "terminal", ni hay un "teletipo" conectado a / dev / tty1. Todos se han convertido en metáforas.
Piskvor salió del edificio el

Respuestas:

622

El retorno de carro significa volver al comienzo de la línea actual sin avanzar hacia abajo. El nombre proviene del carro de una impresora, ya que los monitores eran raros cuando se acuñó el nombre. Esto se suele escapar como CR\r abreviado y tiene un valor ASCII o .130x0D

Salto de línea significa avanzar hacia abajo a la siguiente línea; sin embargo, ha sido reutilizado y renombrado. Usado como "nueva línea", termina las líneas (comúnmente confundidas con líneas de separación ). Esto se suele escapar como \n, abreviado LF o NL, y tiene un valor ASCII 10o 0x0A. CRLF (pero no CRNL) se utiliza para el par \r\n.

El feed de formulario significa avanzar hacia abajo a la siguiente "página". Se usaba comúnmente como separadores de página, pero ahora también se usa como separadores de sección. (Se usa con poca frecuencia en el código fuente para dividir funciones o grupos de funciones lógicamente independientes). Los editores de texto pueden usar este carácter cuando "inserta un salto de página". Esto se suele escapar como \f, abreviado FF , y tiene un valor ASCII 12o 0x0C.


Como caracteres de control, pueden interpretarse de varias maneras.

La diferencia más común (y probablemente la única por la que vale la pena preocuparse) es que las líneas terminan con CRLF en Windows, NL en Me gusta de Unix y CR en Macs más antiguas (la situación ha cambiado con OS X para ser como Unix). Tenga en cuenta que el cambio en el significado de LF a NL, para el mismo carácter exacto, da las diferencias entre Windows y Unix. (Windows es, por supuesto, más nuevo que Unix, por lo que no adoptó este cambio semántico. No conozco la historia de Macs usando CR.) Muchos editores de texto pueden leer archivos en cualquiera de estos tres formatos y convertirlos entre ellos. , pero no todas las utilidades pueden.

La alimentación de formularios es un poco más interesante (aunque se usa con menos frecuencia directamente), y con la definición habitual de separador de página, solo puede aparecer entre líneas (por ejemplo, después de la secuencia de nueva línea de NL, CRLF o CR) o al inicio o Fin del archivo.

Roberto Caboni
fuente
10
Puedo confirmar que OS X usa NL como terminador de línea, al igual que Unix (porque OS X es Unix). CR se utilizó en Mac OS 9 y versiones posteriores.
Rory O'Kane
1
El carácter FF puede parecer extraño hoy (junto con el carácter de campana "CTRL-G") pero tenía más relevancia cuando las pantallas de video eran mucho menos comunes y se usaban terminales impresas como pantallas de datos.
Rick Sarvas
¿No es eso control de alimentación \x0c?
Tjorriemorrie 01 de
2
"No conozco la historia de Macs usando CR". Eso probablemente vino de Apple II usando CR. CR también era común en otros sistemas de 8 bits, como el Commodore y Tandy. ASCII no era universal en estos sistemas: Commodore usaba PETSCII, que tenía LF a 0x8d (!). Atari no tenía ningún personaje LF en absoluto. Por alguna razón, CR = 0x0d era más o menos estándar.
Ssswift
125

\r es el retorno del carro y mueve el cursor hacia atrás como si lo hiciera

printf("stackoverflow\rnine")
ninekoverflow

significa que ha desplazado el cursor al comienzo de "stackoverflow" y sobrescribe los cuatro caracteres iniciales ya que "nueve" tiene cuatro caracteres.

\n es un nuevo carácter de línea que cambia la línea y lleva el cursor al comienzo de una nueva línea como:

printf("stackoverflow\nnine")
stackoverflow
nine

\f es un formulario de alimentación, su uso se ha vuelto obsoleto pero se utiliza para dar sangría como

printf("stackoverflow\fnine")
stackoverflow
             nine

si voy a escribir como

printf("stackoverflow\fnine\fgreat")
stackoverflow
             nine
                 great
usuario3346547
fuente
3
¡Pero este ejemplo no funciona en idiomas de alto nivel!
Sina Karvandi
@ ᔕI ᑎᗩ Kᗩᖇ ᐯᗩᑎᗪ I lo hace: al menos puede hacer lo mismo en el shell de Linux utilizando la printfutilidad de coreutils. O incluso usando el echo -enque es un bash incorporado.
Ruslan
¿Cómo pasar todas las líneas como una sola línea en un archivo?
Paras Singh
8
El avance de formulario no se utiliza para la sangría. Si envía algunos de ellos a una impresora, escupirá papel. Lo que has descrito como \fes en realidad \v: una pestaña vertical, a la que ambos se parecen en la consola.
cprn
printf("123\f456\f789");muestra /> <bold> 123456789 </bold> en la consola.
Mayur
31

Echa un vistazo a Wikipedia :

Los sistemas basados ​​en ASCII o un conjunto de caracteres compatible usan LF (avance de línea, '\ n', 0x0A, 10 en decimal) o CR (retorno de carro, '\ r', 0x0D, 13 en decimal) individualmente, o CR seguido de LF (CR + LF, 0x0D 0x0A). Estos caracteres se basan en los comandos de la impresora: el avance de línea indica que una línea de papel debe salir de la impresora, y un retorno de carro indica que el carro de la impresora debe regresar al comienzo de la línea actual.

tanascio
fuente
25

\fse usa para el salto de página. No puede ver ningún efecto en la consola. Pero cuando usa este carácter constante en su archivo, puede ver la diferencia.

Otro ejemplo es que si puede redirigir su salida a un archivo, entonces no tiene que escribir un archivo o usar el manejo de archivos.

Por ej .:

Escribe este código en c ++

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

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

}

y cuando compilas esto genera un exe (por ej. abc.exe)

entonces puede redirigir su salida a un archivo usando esto:

abc > xyz.doc

luego abra el archivo xyz.doc, puede ver el salto de página real entre hellooo y hiiii ...

Balram Dixit
fuente
21

Además de la información anterior, todavía hay una historia interesante de LF (\ n) y CR (\ r). [Autor original: 阮一峰 Fuente: http://www.ruanyifeng.com/blog/2006/04/post_213.html] Antes de que apareciera la computadora, había un tipo de teleimpresora llamada Teletype Model 33. Puede imprimir 10 caracteres cada una segundo. Pero hay un problema con esto, después de terminar de imprimir cada línea, pasará 0.2 segundos para pasar a la siguiente línea, que es el momento de imprimir 2 caracteres. Si se transfiere un nuevo personaje durante este segundo 0.2, entonces este nuevo personaje se perderá.

Entonces, los científicos encontraron una forma de resolver este problema, agregaron dos caracteres finales después de cada línea, uno es 'Retorno de carro', que es decirle a la impresora que lleve el cabezal de impresión a la izquierda; el otro es 'Avance de línea', le dice a la impresora que mueva el papel 1 línea hacia arriba.

Más tarde, la computadora se hizo popular, estos dos conceptos se utilizan en las computadoras. En ese momento, el dispositivo de almacenamiento era muy costoso, por lo que algunos científicos dijeron que era costoso agregar dos caracteres al final de cada línea, uno es suficiente, por lo que hay algunos argumentos sobre cuál usar.

En UNIX / Mac y Linux, '\ n' se coloca al final de cada línea, en Windows, '\ r \ n' se coloca al final de cada línea. La consecuencia de este uso es que los archivos en UNIX / Mac se mostrarán en una línea si se abren en Windows. Mientras que el archivo en Windows tendrá una ^ M al final de cada línea si se abre en UNIX o Mac.

wxie
fuente
1
Con el lanzamiento de OSX (basado en BSD unix), la Mac cambió a '\ n' - Terminaciones de línea Unix.
Jonathan Cross
"Los archivos en UNIX / Mac se mostrarán en una línea si se abren en Windows". WRITE.EXE(también conocido como Wordpad) puede mostrarlos bien.
thecarpy
18

En los terminales antiguos de impresoras de papel, avanzar a la siguiente línea implicaba dos acciones: mover el cabezal de impresión al comienzo del rango de escaneo horizontal (retorno del carro) y avanzar el rollo de papel en el que se imprime (avance de línea).

Como ya no usamos terminales de impresoras de papel, esas acciones ya no son realmente relevantes, pero los caracteres utilizados para señalarlas se han quedado en varias encarnaciones.

Ámbar
fuente
En realidad, el 'retorno de carro' no mueve el cabezal de impresión hacia la izquierda, sino que mueve el carro que sujeta la platina hacia la derecha. Solía ​​haber una palanca larga que fue accionada por la mano izquierda para hacer esto. Ver en.wikipedia.org/wiki/Typewriter
Mark Lakata
2
@MarkLakata Verdadero para máquinas de escribir, pero esta respuesta es sobre terminales de impresión antiguas. Por ejemplo, el DEC LA36 ( columbia.edu/cu/computinghistory/la36.html ).
Peter Cardona el
12

Considere una impresora de impacto IBM 1403. CR movió el cabezal de impresión al inicio de la línea, pero NO avanzó el papel. Esto permitió la "sobreimpresión", colocando múltiples líneas de salida en una línea. Se lograron cosas como el subrayado de esta manera, al igual que la impresión BOLD. LF avanzó el papel una línea. Si no hubiera CR, la siguiente línea se imprimiría como un paso escalonado porque LF no movió el cabezal de impresión. FF avanzó el papel a la página siguiente. Por lo general, también movió el cabezal de impresión al comienzo de la primera línea en la nueva página, pero es posible que necesite CR para eso. Sin duda, la mayoría de los programadores codificaron CRFF en lugar de CRLF al final de la última línea de una página porque un CR extra creado por FF no importaría.

Dick Guertin
fuente
Esta es la única respuesta que explica el significado completo del retorno de carro.
Lee
12

En breve :

Carriage_return ( \ro 0xD): para tomar el control al comienzo de la misma línea .

Line_Feed ( \no 0xA): para tomar el control al comienzo de la siguiente línea .

form_feed ( \fo 0xC): para tomar el control al comienzo de la página siguiente .

Ritik Kamboj
fuente
2
Se debe alentar una respuesta sucinta como esta.
user5280911
10

Como suplemento

1, retorno de carro : es una terminología de impresora que significa cambiar la ubicación de impresión al comienzo de la línea actual . En el mundo de la informática, significa volver al comienzo de la línea actual en la mayoría de los casos, pero rara vez representa la nueva línea.

2, avance de línea : es una terminología de impresora que significa avanzar el papel una línea. Por lo tanto, el retorno de carro y el avance de línea se usan juntos para comenzar a imprimir al comienzo de una nueva línea. En el mundo de la informática, generalmente tiene el mismo significado que la nueva línea.

3, Alimentación de formulario : es una terminología de impresora, me gusta la explicación en este hilo .

Si estuviera programando para una impresora de estilo de los años ochenta, expulsaría el papel y comenzaría una nueva página. Está prácticamente seguro de que nunca lo necesitará.

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

Es casi obsoleto y puede consultar la secuencia de escape \ f - formulario de alimentación - ¿qué es exactamente? para una explicación detallada

Tenga en cuenta que podemos usar CR o LF o CRLF para representar la nueva línea en algunas plataformas, pero no se puede usar la nueva línea en otras plataformas. Consulte wiki Newline para más detalles.

LF: Multics, Unix y sistemas similares a Unix (Linux, OS X, FreeBSD, AIX, Xenix, etc.), BeOS, Amiga, RISC OS y otros

CR: máquinas Commodore de 8 bits, Acorn BBC, ZX Spectrum, TRS-80, familia Apple II, Oberon, el Mac OS clásico hasta la versión 9, MIT Lisp Machine y OS-9

RS: implementación QNX pre-POSIX

0x9B: máquinas Atari de 8 bits que utilizan la variante ATASCII de ASCII (155 en decimal)

CR + LF: Microsoft Windows, DOS (MS-DOS, PC DOS, etc.), DEC TOPS-10, RT-11, CP / M, MP / M, Atari TOS, OS / 2, Symbian OS, Palm OS, Amstrad CPC y la mayoría de los otros sistemas operativos tempranos que no son Unix ni IBM

LF + CR: salida de texto en spool Acorn BBC y RISC OS.

Eugene
fuente
3

"\ n" es el carácter de salto de línea. Significa finalizar la línea actual e ir a una nueva línea para cualquiera que la lea.

vpit3833
fuente
3

El retorno del carro y el avance de línea también son referencias a máquinas de escribir, ya que con un pequeño empujón en el asa del lado izquierdo del carro (el lugar donde va el papel), el papel rotaría una pequeña cantidad alrededor del cilindro, avanzando documentar una línea. Si había terminado de escribir una línea y deseaba continuar con la siguiente, presionó con más fuerza, avanzó una línea y deslizó el carro hacia la derecha, luego reanudó la escritura de izquierda a derecha nuevamente mientras el carro viajaba con cada pulsación de tecla . No hace falta decir que el ajuste de texto era la configuración predeterminada para todo el procesamiento de texto de la época. P: D

TheLastWordSword
fuente
2

Esos son caracteres no impresos, relacionados con el concepto de "nueva línea". \ n es salto de línea. \ r es el retorno de carro. En diferentes plataformas tienen diferentes significados, en relación con una nueva línea válida. En Windows, una nueva línea es \ r \ n. En linux, \ n. En mac, \ r.

En la práctica, los coloca en cualquier cadena, y tendrá efecto en la impresión de la cadena.

Palantir
fuente