O que são retorno de carro, avanço de linha e avanço de formulário?


500

Qual é o significado dos seguintes caracteres de controle:

  1. Retorno de carro

  2. Alimentação de linha

  3. Alimentação de formulário


14
O que significa "retorno de carro"? Não vejo nenhuma "carruagem" "retornando" no meu laptop. : s
Jean Hominal

12
@JeanHominal a carruagem basicamente significa o cursor (ou o ponteiro nas máquinas de escrever antigas), e return significa retornar ao início dessa linha.
sofe

Não vejo nenhum cabo terminado (ou painéis de vidro) na minha "janela" "terminal", nem existe um "teletipo" anexado a / dev / tty1. Todos eles se tornaram metáforas.
Piskvor saiu do prédio em 26/03/19

Respostas:


621

Retorno de carro significa retornar ao início da linha atual sem avançar para baixo. O nome vem do carro de uma impressora, pois os monitores eram raros quando o nome foi cunhado. Geralmente, isso é escapado como CR\r abreviado e tem valor ASCII ou130x0D .

Alimentação de linha significa avançar para a próxima linha; no entanto, foi redirecionado e renomeado. Usado como "nova linha", ele termina as linhas (geralmente confundidas com as linhas de separação ). Isso geralmente é escapado como \n, abreviado LF ou NL, e tem valor ASCII 10ou 0x0A. O CRLF (mas não o CRNL) é usado para o par \r\n.

Feed de formulário significa avançar para a próxima "página". Era comumente usado como separadores de páginas, mas agora também é usado como separadores de seção. (É incomumente usado no código fonte para dividir funções ou grupos de funções logicamente independentes.) Os editores de texto podem usar esse caractere quando você "insere uma quebra de página". Isso geralmente é escapado como \f, abreviado FF , e tem valor ASCII 12ou 0x0C.


Como caracteres de controle, eles podem ser interpretados de várias maneiras.

A diferença mais comum (e provavelmente a única que vale a pena se preocupar) é que as linhas terminam com CRLF no Windows, NL em curtidas de Unix e CR em Macs mais antigos (a situação mudou no OS X para ser como Unix). Observe a mudança de significado de LF para NL, exatamente para o mesmo caractere, fornece as diferenças entre Windows e Unix. (É claro que o Windows é mais novo que o Unix, por isso não adotou essa mudança semântica. Não conheço o histórico de Macs usando CR.) Muitos editores de texto podem ler arquivos em qualquer um desses três formatos e converter entre eles. , mas nem todos os utilitários podem.

O feed de formulário é um pouco mais interessante (embora seja menos comumente usado diretamente) e, com a definição usual de separador de páginas, ele só pode ocorrer entre linhas (por exemplo, após a sequência de nova linha de NL, CRLF ou CR) ou no início ou final do arquivo.


10
Posso confirmar que o OS X usa o NL como terminador de linha, assim como o Unix (porque o OS X é um Unix). O CR foi usado no Mac OS 9 e abaixo.
Rory O'Kane

1
O caractere FF pode parecer estranho hoje (junto com o caractere sino "CTRL-G"), mas tinha mais relevância quando os monitores de vídeo eram muito menos comuns e os terminais impressos eram usados ​​como monitores de dados.
21813 Rick Sarvas

Isso não é controle de alimentação \x0c?
Tjorriemorrie

2
"Não conheço a história dos Macs usando CR." Isso provavelmente veio do Apple II usando CR. O CR também era comum em outros sistemas de 8 bits, como o Commodore e o Tandy. O ASCII não era universal nesses sistemas: o Commodore usava o PETSCII, que tinha LF em 0x8d (!). Atari não tinha caráter LF. Por qualquer motivo, CR = 0x0d era mais ou menos padrão.
Ssswift

125

\r é retorno de carro e move o cursor para trás como se eu fosse

printf("stackoverflow\rnine")
ninekoverflow

significa que mudou o cursor para o início de "stackoverflow" e substitui os quatro caracteres iniciais, já que "nine" tem quatro caracteres.

\n é um caractere de nova linha que altera a linha e leva o cursor para o início de uma nova linha, como

printf("stackoverflow\nnine")
stackoverflow
nine

\f é um feed de formulário, seu uso tornou-se obsoleto, mas é usado para fornecer recuos como

printf("stackoverflow\fnine")
stackoverflow
             nine

se eu vou escrever como-

printf("stackoverflow\fnine\fgreat")
stackoverflow
             nine
                 great

3
Mas este exemplo não funciona em idiomas de alto nível!
Sina Karvandi

@ ItI ᑎᗩ Kᗩᖇ ᐯᗩᑎᗪ I faz: você pode pelo menos fazer o mesmo no shell do Linux usando o printfutilitário coreutils. Ou mesmo usando o echo -enque é um bash embutido.
Ruslan

Como passar todas as linhas como uma única linha em um arquivo?
Paras Singh

8
O avanço de formulário não é usado para indentação. Se você enviar alguns deles para uma impressora, ele cuspirá papel. O que você descreveu como \fé realmente \v- uma guia vertical, concedida, ambos têm a mesma aparência no console.
CPRN

printf("123\f456\f789");mostra /> <bold> 123456789 </bold> no console.
275 Mayur

31

Dê uma olhada na Wikipedia :

Os sistemas baseados em ASCII ou em um conjunto de caracteres compatível usam LF (avanço de linha, '\ n', 0x0A, 10 em decimal) ou CR (retorno de carro, '\ r', 0x0D, 13 em decimal) individualmente ou CR seguido por LF (CR + LF, 0x0D 0x0A). Esses caracteres são baseados nos comandos da impressora: A alimentação de linha indica que uma linha de papel deve sair da impressora e um retorno de carro indica que o carro da impressora deve retornar ao início da linha atual.


25

\fé usado para quebra de página. Você não pode ver nenhum efeito no console. Mas quando você usa esse caractere constante em seu arquivo, pode ver a diferença.

Outro exemplo é que, se você pode redirecionar sua saída para um arquivo, não é necessário gravar um arquivo ou usar a manipulação de arquivos.

Por exemplo:

Escreva esse código em c ++

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

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

}

e quando você compila isso, gera um exe (por ex. abc.exe)

então você pode redirecionar sua saída para um arquivo usando o seguinte:

abc > xyz.doc

abra o arquivo e xyz.docvocê poderá ver a quebra de página real entre hellooo e hiiii ....


21

Além das informações acima, ainda há uma história interessante de LF (\ n) e CR (\ r). [Autor original: 阮一峰 Fonte: http://www.ruanyifeng.com/blog/2006/04/post_213.html] Antes do computador ser lançado, havia um tipo de teleprinter chamado Teletype Model 33. Ele pode imprimir 10 caracteres cada segundo. Mas há um problema com isso: depois de terminar de imprimir cada linha, levará 0,2 segundos para passar para a próxima linha, que é a hora de imprimir 2 caracteres. Se um novo personagem for transferido durante esse 0,2 segundo, esse novo personagem será perdido.

Assim, os cientistas descobriram uma maneira de resolver esse problema: eles adicionam dois caracteres finais após cada linha, um é 'Retorno de carro', que é dizer à impressora para trazer a cabeça de impressão para a esquerda .; o outro é 'Alimentação de linha', informa à impressora para mover o papel uma linha acima.

Mais tarde, o computador se tornou popular, esses dois conceitos são usados ​​em computadores. Naquela época, o dispositivo de armazenamento era muito caro, então alguns cientistas disseram que era caro adicionar dois caracteres no final de cada linha, um é o suficiente, então há alguns argumentos sobre qual deles usar.

No UNIX / Mac e Linux, '\ n' é colocado no final de cada linha, no Windows, '\ r \ n' é colocado no final de cada linha. A conseqüência desse uso é que os arquivos no UNIX / Mac serão exibidos em uma linha se abertos no Windows. Enquanto o arquivo no Windows tiver um ^ M no final de cada linha, se for aberto no UNIX ou Mac.


1
Com o lançamento do OSX (baseado no BSD unix), o Mac mudou para '\ n' - finais de linha Unix.
Jonathan Cross

"Os arquivos no UNIX / Mac serão exibidos em uma linha se abertos no Windows." WRITE.EXE(também conhecido como Wordpad) pode exibi-los perfeitamente.
Thecarpy

18

Nos terminais antigos da impressora de papel, avançar para a próxima linha envolvia duas ações: mover a cabeça de impressão de volta para o início da faixa de digitalização horizontal (retorno de carro) e avançar o rolo de papel sendo impresso (alimentação de linha).

Como não usamos mais terminais de impressora de papel, essas ações não são mais relevantes, mas os caracteres usados ​​para sinalizá-las permaneceram em várias encarnações.


Na verdade, 'retorno do carro' não move a cabeça de impressão para a esquerda, mas move o carro que segura o cilindro para a direita. Costumava haver uma alavanca longa que era acionada pela mão esquerda para fazer isso. Veja en.wikipedia.org/wiki/Typewriter
Mark Lakata

2
@ MarkLakata True para máquinas de escrever, mas esta resposta é sobre terminais de impressão antigos. Por exemplo, o DEC LA36 ( columbia.edu/cu/computinghistory/la36.html ).
22613 Peter Cardona

12

Considere uma impressora de impacto IBM 1403. O CR moveu a cabeça de impressão para o início da linha, mas NÃO avançou o papel. Isso permitiu a "superimpressão", colocando várias linhas de saída em uma linha. Desta forma, coisas como sublinhado foram alcançadas, assim como a impressão em negrito. LF avançou o papel uma linha. Se não houvesse CR, a próxima linha seria impressa como uma etapa escalonada, porque LF não movia a cabeça de impressão. FF avançou o papel para a próxima página. Normalmente, também movia a cabeça de impressão para o início da primeira linha da nova página, mas você pode precisar de CR para isso. Certamente, a maioria dos programadores codificou CRFF em vez de CRLF no final da última linha de uma página, porque um CR extra criado por FF não importaria.


Esta é a única resposta que explica o significado completo do retorno de carro.
Lee

12

Em resumo :

Carriage_return ( \ror 0xD): Para assumir o controle no início da mesma linha .

Line_Feed ( \nou 0xA): Para assumir o controle no início da próxima linha .

form_feed ( \for 0xC): Para assumir o controle no início da próxima página .


2
Respostas sucintas como essa devem ser incentivadas.
user5280911 26/01

10

Como complemento,

1, Retorno de carro : é uma terminologia da impressora que significa alterar o local da impressão para o início da linha atual . No mundo dos computadores, na maioria dos casos, significa retornar ao início da linha atual, mas raramente significa nova linha.

2, Alimentação de linha : é uma terminologia da impressora que significa avançar uma linha no papel. Portanto, o retorno de carro e a alimentação de linha são usados ​​juntos para começar a imprimir no início de uma nova linha. No mundo dos computadores, geralmente tem o mesmo significado que a nova linha.

3, alimentação de formulário : é uma terminologia de impressora, eu gosto da explicação neste tópico .

Se você estivesse programando para uma impressora do estilo da década de 1980, ela ejetaria o papel e iniciaria uma nova página. Você está praticamente certo de nunca precisar disso.

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

É quase obsoleto e você pode consultar a seqüência de escape \ f - formulário de alimentação - o que exatamente é isso? para explicação detalhada.

Observe que podemos usar CR ou LF ou CRLF para representar nova linha em algumas plataformas, mas a nova linha não pode ser suportada por elas em outras plataformas. Consulte o wiki Newline para obter detalhes.

LF: sistemas Multics, Unix e Unix-like (Linux, OS X, FreeBSD, AIX, Xenix, etc.), BeOS, Amiga, RISC OS e outros

CR: máquinas Commodore de 8 bits, Acorn BBC, ZX Spectrum, TRS-80, família Apple II, Oberon, o clássico Mac OS até a versão 9, MIT Lisp Machine e OS-9

Implementação RS: QNX pré-POSIX

0x9B: máquinas Atari de 8 bits usando a variante ATASCII de ASCII (155 em 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 e a maioria dos outros sistemas operacionais não-Unix e não-IBM antigos

LF + CR: saída de texto em bolota da BBC Acorn e do RISC OS.


3

"\ n" é o caractere de avanço de linha. Isso significa encerrar a linha atual e ir para uma nova linha para quem estiver lendo.


3

O retorno do carro e a alimentação da linha também são referências às máquinas de escrever, pois, com um pequeno empurrão na alça do lado esquerdo do carro (o local onde o papel vai), o papel giraria uma pequena quantidade ao redor do cilindro, avançando a documentar uma linha. Se você havia terminado de digitar uma linha e desejava continuar para a próxima, pressionava mais, avançando uma linha e deslizando o carro completamente para a direita e, em seguida, retomando a digitação da esquerda para a direita novamente, à medida que o carro viajava com cada pressionamento de tecla . Desnecessário dizer que a quebra de linha foi a configuração padrão para todo o processamento de texto da época. P: D


2

Esses são caracteres não imprimíveis, relacionados ao conceito de "nova linha". \ n é avanço de linha. \ r é retorno de carro. Em plataformas diferentes, eles têm significados diferentes, em relação a uma nova linha válida. No Windows, uma nova linha é \ r \ n. No linux, \ n. No mac, \ r.

Na prática, você as coloca em qualquer sequência, e isso terá efeito na impressão da sequência.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.