2012-03-14 84 views
6

Este es mi código:C++ salto de línea 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; 
} 

El problema es que todo en output.dat está en la misma línea. ¿Cómo puedo resolver esto?

Gracias!

EDITAR: Estaba usando Windows para ver los archivos y Linux para compilar. Esta es la razón por la cual me encontré con este problema. El uso de cat output.dat en el lado de Linux para ver el contenido del archivo habría revelado que los saltos de línea entre Windows y Linux son diferentes en ese momento.

+2

posible duplicado de [C++ Ofstream una nueva línea] (http://stackoverflow.com/questions/6352283/c-ofstream-a-new-line) – karlphillip

+2

[Inconcebible] (http://www.youtube.com/watch? v = 1-b7RmmMJeo). ¿Estás * seguro * en output.dat solo tiene una línea? ¿Cómo estás revisando? Además, ¿qué sistema operativo y compilador estás usando? –

+0

Estoy usando Windows y Bloc de notas para verificar el archivo de salida. –

Respuesta

2

std :: endl ya inserta un salto de línea, por lo que tiene saltos de línea en su archivo. Supongo que está generando su archivo en un sistema LF (Linux u otro similar a UNIX) y lo está viendo en un sistema CRLF. En este caso, su salto de línea no aparecerá en el editor de texto como un salto de línea. unix2dos es tu amigo.

+0

Estoy usando Windows y Bloc de notas para verificar el archivo de salida. –

+3

Incluso si genera bajo Unix y lee bajo Windows, la mayoría de los editores lo mostrarán correctamente. Si ese es su problema, la solución correcta es usar un editor diferente; un verdadero programa de Windows generará CRLF, pero será independiente de la entrada (al igual que un verdadero programa de Windows generará '\' como separador de ruta, pero aceptará tanto '\' como '/'). –

+2

@ Pirate43 Bloc de notas es inútil. Pruebe con cualquier otra cosa (incluso 'type filename' desde la ventana de una consola). –

5

Reemplace std::endl con "\r\n" para obtener CRLF en lugar de solo LF.

+5

Recomiendo contra esto. Excepto que si está escribiendo archivos en Unix y quiere terminaciones de línea en Windows, no hay muchas alternativas. (Me pregunto si alguien ha implementado un 'filebuf' que toma una opción de formateo adicional, para especificar la convención de fin de línea que se debe usar para la salida.) –

+0

@JamesKanze: de hecho, no podría estar más de acuerdo, pero parece que eso es lo que sucede aquí. Trabajar con 'filebuf' es mejor, y me encantaría verlo aquí. –

+0

@JamesKanze, por cierto, dudo si nuestro amigo aquí, puede ir en esa medida, y que está teniendo una gama tan amplia de aplicaciones para que su código funcione y debería probar 'filebuf'. –