Qual é o significado dos seguintes caracteres de controle:
Retorno de carro
Alimentação de linha
Alimentação de formulário
Qual é o significado dos seguintes caracteres de controle:
Retorno de carro
Alimentação de linha
Alimentação de formulário
Respostas:
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 ou13
0x0D
.
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 10
ou 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 12
ou 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.
\x0c
?
\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
printf
utilitário coreutils. Ou mesmo usando o echo -en
que é um bash embutido.
\f
é realmente \v
- uma guia vertical, concedida, ambos têm a mesma aparência no console.
printf("123\f456\f789");
mostra /> <bold> 123456789 </bold> no console.
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.
\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.doc
você poderá ver a quebra de página real entre hellooo e hiiii ....
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.
WRITE.EXE
(também conhecido como Wordpad) pode exibi-los perfeitamente.
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.
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.
Em resumo :
Carriage_return ( \r
or 0xD
): Para assumir o controle no início da mesma linha .
Line_Feed ( \n
ou 0xA
): Para assumir o controle no início da próxima linha .
form_feed ( \f
or 0xC
): Para assumir o controle no início da próxima página .
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.
É 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.
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
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.