2012-03-14 3 views
6

Это мой код:C++ 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; 
} 

Проблема заключается в том, все в output.dat находятся на ту же линию. Как я могу это решить?

Спасибо!

EDIT: Я использовал Windows для просмотра файлов и Linux для компиляции. Вот почему я столкнулся с этой проблемой. Использование cat output.dat на стороне Linux для просмотра содержимого файла показало бы, что разрывы строк Windows и Linux в то время различны.

+2

Возможный дубликат [C++ Ofstream новая строка] (http://stackoverflow.com/questions/6352283/c-ofstream-a-newline) – karlphillip

+2

[Inconceivable] (http://www.youtube.com/смотреть? v = 1-b7RmmMJeo). Вы уверены, что output.dat имеет только одну строку? Как вы проверяете? Кроме того, какую операционную систему и компилятор вы используете? –

+0

Я использую окна и блокнот для проверки выходного файла. –

ответ

2

std :: endl уже вставляет строку, так что у вас есть строки в вашем файле. Я предполагаю, что вы создаете свой файл в LF-системе (Linux или другой UNIX-подобный) и просматриваете ее в CRLF-системе. В этом случае ваш linebreak не будет отображаться в текстовом редакторе в виде строки. unix2dos - твой друг.

+0

Я использую окна и блокнот для проверки выходного файла. –

+3

Даже если он создает под Unix и читает под Windows, большинство редакторов отобразит его правильно. Если это его проблема, правильным решением является использование другого редактора; настоящая программа Windows выведет CRLF, но будет агностиком для ввода (точно так же, как настоящая программа Windows выведет '\' в качестве разделителя путей, но примет как '\', так и '/'). –

+2

@ Pirate43 Блокнот бесполезен. Попробуйте что-нибудь еще (даже «введите имя файла» из окна консоли). –

5

Замените std::endl на "\r\n", чтобы получить CRLF вместо LF.

+5

Я бы рекомендовал против этого. Кроме того, если вы пишете файлы под Unix, и вы хотите окончания строки Windows, альтернативы нет. (Интересно, добавил ли кто-нибудь «filebuf», который использует дополнительную опцию форматирования, чтобы указать соглашение о завершении строки, которое должно использоваться для вывода.) –

+0

@JamesKanze: действительно, я не мог согласиться больше, но кажется, что это что здесь происходит. Лучше работать с 'filebuf', и мне бы хотелось увидеть его здесь. –

+0

@JamesKanze, кстати, я сомневаюсь, что наш друг здесь может пойти в такой степени и что у него есть такой широкий спектр приложений, чтобы его код работал над этим, он должен попробовать 'filebuf'. –