Pergunta

Parece que apenas colocar um avanço de linha é bom o suficiente, mas eu sei que é suposto ser carruagem de alimentação + linha de retorno. Faz alguma coisa horrível acontecer se você não colocar o retorno de carro e só usar alimentações de linha?

Esta é em ANSI C e não vai ser redirecionada para um arquivo ou qualquer outra coisa. Apenas um console app normal.

Foi útil?

Solução

O console do Windows segue a mesma linha que termina convenção assumida para arquivos, ou para essa matéria para os terminais de reais, físicos. Ele precisa ver tanto CR e LF para mover corretamente para a próxima linha.

Dito isto, há uma série de infra-estrutura de software entre um programa ANSI C e que console. Em particular, qualquer função de biblioteca C I / O padrão vai tentar fazer a coisa certa, supondo que você tenha permitido que a chance. É por isso que fopen() e t modificadores de b para o parâmetro mode foram definidos.

Com t (o padrão para a maioria dos fluxos, e em particular para stdin e stdout), então qualquer \n impresso é convertido para uma sequência CRLF, e ocorre o inverso, para leituras. Para desligar esse comportamento, use o modificador b.

A propósito, os terminais tradicionalmente ligado a caixas de * nix incluindo DEC VT100 emulados por XTerm também precisa tanto de CR e LF. No entanto, no mundo * nix, a conversão de um caractere de nova linha a uma sequência CRLF é tratado no driver de dispositivo tty assim a maioria dos programas não precisa de saber sobre isso, e os t e b modificadores são ambos ignorado. Nessas plataformas, se você precisar enviar e receber caracteres em um tty sem que a modificação, você precisa olhar para cima stty (1) ou as chamadas de sistema que depende.

Se o seu caso contrário o programa ANSI C é evitar biblioteca C I / O para a consola (talvez porque você precisa de acesso a caráter cor da consola e outros atributos), então se você precisa enviar CR ou não vai depender de qual chamadas de API Win32 você está usando para enviar os caracteres.

Outras dicas

Se você estiver em um ambiente * nix \ n (Linefeed) é provavelmente ok. Se você estiver no Windows e não estão redirecionando (agora) um avanço de linha também é ok, mas se alguém em redirecionamentos somepoint,: - (

Se você está fazendo o Windows no entanto, poderia haver problemas se a saída é redirecionada para um arquivo de texto e, em seguida, um outro processo tenta consumir os dados.

O console sabe o que mostrar, mas os consumidores podem não ser feliz ...

Se você estiver usando C # Você pode tentar o "constante" Environment.NewLine.

http://msdn.microsoft.com/en -us / library / system.environment.newline.aspx

Se você está realmente em vanilla c, você está preso com \ r \ n. : -)

Depende do que você está usando-os para. Alguns programas não irá exibir novas linhas corretamente se você não colocar tanto \r e \n.

Se você tentar única \n escrever alguns programas que consomem o seu arquivo de texto (ou saída) poderá apresentar seu texto como uma única linha, em vez de várias linhas.

Existem também alguns formatos de arquivos e protocolos que serão completamente inválido sem usar tanto \r e \n.

Eu não tentei isso há tanto tempo que eu não tenho certeza eu me lembro o que acontece ... mas não um avanço de linha por si só descer uma linha sem retornar para a coluna esquerda?

Dependendo do seu compilador, a saída padrão pode ser aberto em modo texto, caso em que um único avanço de linha será traduzido para \ r \ n antes de ser escrito.

Editar: Eu apenas tentei um teste rápido, e no XP um arquivo sem retornos exibe normalmente. Eu ainda não sei se qualquer compiladores inserir os retornos para você.

Em C, os arquivos (chamados de "streams") vêm em dois sabores -. Binário ou de texto

O significado desta distinção é a implementação / plataforma esquerda dependente, mas no Windows (com implementações comuns que eu vi) quando se escreve para fluxos de texto '\ n' é automaticamente traduzido para "\ r \ n", e quando a leitura de fluxos de texto "\ r \ n" é automaticamente traduzido para '\ n'.

O "console" é realmente "saída padrão", que é uma corrente aberta por padrão como um fluxo de texto. "Olá, mundo \ n" Então, na prática, no Windows, escrevendo deve ser bastante suficiente -. E portátil

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top