Domanda

Sembra che basta mettere un avanzamento di riga è abbastanza buono, ma so che non è supposto per essere carriage return + line feed.Fa qualcosa di orribile accadere se non si mette il ritorno a capo e la uso solo in linea i feed?

Questo è in ANSI C e non sta per essere reindirizzato a un file o quant'altro.Basta una normale applicazione console.

È stato utile?

Soluzione

La console di Windows segue la stessa linea che termina convenzione che viene assunto per i file, o per quella materia, per reale, fisica, terminali.Ha bisogno di vedere entrambi i CR e LF correttamente, passare alla riga successiva.

Detto questo, c'è un sacco di software di infrastruttura tra un programma ANSI C e quella console.In particolare, qualsiasi libreria C standard I/O funzione è andando a cercare di fare la cosa giusta, supponendo di aver permesso la possibilità.Questo è il motivo per cui fopen()'s t e b i modificatori per l' mode parametro sono stati definiti.

Con t (l'impostazione predefinita per la maggior parte dei flussi, e in particolare per stdin e stdout) quindi qualsiasi \n la stampa è convertito in una sequenza CRLF, e accade l'inverso per legge.Per disattivare questo comportamento, utilizzare il b modificatore.

Per inciso, i terminali tradizionalmente agganciato a *nix caselle tra cui il DEC VT100 emulato da XTerm anche le esigenze di entrambi i CR e LF.Tuttavia, in *nix mondo, la conversione da un carattere di " a capo di una sequenza CRLF è gestita nel dispositivo tty driver così la maggior parte dei programmi non c'è bisogno di sapere su di esso, e il t e b i modificatori sono entrambi ignorati.Su queste piattaforme, se avete bisogno di inviare e ricevere i caratteri su una tty senza che la modifica, è necessario cercare stty(1) o le chiamate di sistema da cui dipende.

Se il tuo altrimenti ANSI C programma è quello di evitare di libreria C di I/O da console (forse perché è necessario accedere alla console di carattere, il colore e altri attributi) quindi se avete bisogno di inviare CR o non dipende dalle chiamate di API Win32 che si utilizza per inviare i personaggi.

Altri suggerimenti

Se siete in un *nix ambiente (avanzamento Riga) è probabilmente ok.Se sei in Windows e non il reindirizzamento (ora) un avanzamento di riga è ok, ma se qualcuno a somepoint reindirizzamenti :-(

Se si sta eseguendo Windows, però, ci potrebbero essere problemi se l'output viene reindirizzato a un file di testo e poi un altro processo tenta di utilizzare i dati.

La console si sa che cosa vedi, ma i consumatori potrebbero non essere felice...

Se si sta utilizzando C# Si potrebbe provare l'Ambiente.NewLine "costante".

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

Se siete veramente in vanilla c, sei bloccato con .:-)

Dipende da cosa stai usando per loro.Alcuni programmi non visualizza i ritorni a capo correttamente se non si mette entrambi \r e \n.

Se si tenta di scrivere solo \n alcuni programmi che utilizzano il file di testo (o di output) può visualizzare il testo su una sola riga, invece di più linee.

Ci sono anche alcuni formati di file e protocolli che saranno completamente non valido senza l'utilizzo di entrambi \r e \n.

Non l'ho ancora provato in tanto tempo che io non sono sicuro di ricordare cosa accade...ma non un avanzamento riga stessa spostare verso il basso una linea senza tornare alla colonna di sinistra?

A seconda del compilatore, lo standard output potrebbe essere aperto in modalità testo, in questo caso una singola riga sarà tradotto in prima di essere scritto.

Edit: Ho appena provato un test rapido, e in XP un file senza restituisce visualizza normalmente.Io ancora non so se i compilatori inserire la restituisce per voi.

In C, file ("flussi"), sono di due tipi - binario o di testo.

Il significato di questa distinzione è di sinistra attuazione/dipendente dalla piattaforma, ma su Windows (con implementazioni più comuni che ho visto) durante la scrittura del testo flussi di ' ' viene automaticamente tradotto in " ", e durante la lettura da flussi di testo " " viene tradotto automaticamente a ' '.

La "console" è in realtà "standard output", che è un flusso aperto per impostazione predefinita, come un flusso di testo.Quindi, in pratica, su Windows, scrivere "Hello, world! " dovrebbe essere più che sufficiente - e portatile.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top