2012-03-14 21 views
6

Questo è il mio codice:C++ interruzione di linea ofstream

#include <iostream> 
#include <fstream> 
using namespace std; 
int main() 
{ 
    ifstream ifile ("input.dat", ios::in); 
    ofstream ofile ("output.dat",ios::out); 

    int num; 
    ifile >> num; 
    ofile << num; 
    ofile << endl; 
    ofile << "Did we go to new line?"; 
    ofile << endl; 

    return 0; 
} 

Il problema è, tutto in output.dat è sulla stessa linea. Come posso risolvere questo?

Grazie!

EDIT: Stavo usando Windows per vedere i file e Linux da compilare. Questo è il motivo per cui mi sono imbattuto in questo problema. L'utilizzo di cat output.dat da parte di Linux per vedere il contenuto del file avrebbe rivelato che le interruzioni di riga tra Windows e Linux sono diverse al momento.

+2

possibile duplicato di [C++ Ofstream una nuova riga] (http://stackoverflow.com/questions/6352283/c-ofstream-a-new-line) – karlphillip

+2

[Inconcepibile] (http://www.youtube.com/watch? v = 1-b7RmmMJeo). Sei * sicuro * output.dat ha solo una riga? Come stai controllando? Inoltre, che sistema operativo e compilatore stai usando? –

+0

Sto usando windows e notepad per controllare il file di output. –

risposta

2

std :: endl inserisce già un'interruzione di riga, quindi nel file vi sono interruzioni di riga. Presumo che tu stia generando il tuo file su un sistema LF (Linux o altro simile a UNIX) e visualizzandolo su un sistema CRLF. In questo caso, l'interruzione di riga non verrà visualizzata nell'editor di testo come interruzione di riga. unix2dos è tuo amico.

+0

Sto usando windows e notepad per controllare il file di output. –

+3

Anche se genera sotto Unix e legge sotto Windows, la maggior parte degli editor lo visualizzerà correttamente. Se questo è il suo problema, la soluzione corretta è usare un editor diverso; un vero programma Windows emetterà CRLF, ma sarà agnostico per l'input (proprio come un vero programma Windows restituirà '\' come separatore di percorso, ma accetta sia '\' che '/'). –

+2

@ Pirate43 Blocco note è inutile. Prova qualsiasi altra cosa (anche 'digita il nome del file 'da una finestra della console). –

5

Sostituire std::endl con "\r\n" per ottenere CRLF anziché solo LF.

+5

Mi raccomando contro questo. Tranne che se stai scrivendo file sotto Unix e vuoi terminazioni di linea di Windows, non c'è molta alternativa. (Mi chiedo se qualcuno ha implementato un 'filebuf' che prende un'ulteriore opzione di formattazione, per specificare la convenzione di fine linea che dovrebbe essere usata per l'output.) –

+0

@JamesKanze: in effetti, non potrei essere più d'accordo, ma sembra che è quello che succede qui. Lavorare con 'filebuf' è meglio, e mi piacerebbe vederlo qui. –

+0

@JamesKanze a proposito del dubbio che se il nostro amico qui, può andare fino a quel punto, e che ha una gamma così ampia di applicazioni su cui il suo codice funziona, dovrebbe provare 'filebuf'. –