2011-01-10 2 views
3

У меня есть проблема, когда я хочу распечатать \n Я использую для этого endl. И проблема в том, что когда я запускаю код в Windows7, он не будет распечатывать новую строку. Но он напечатает новую строку в Ubuntu. Обе ОС используют один и тот же компилятор GNU g ++.ofstream не распечатывает новую строку для txt в Windows7

Так что я задаюсь вопросом, есть ли другой способ печати новой строки в файл в Windows?

void translate(ofstream &out, const string &line, map<string, string> m) 
{ 
    stringstream ss(line); 
    string word; 
    while(ss >> word) 
    { 
     if(m[word].size() == 0) 
     out << "A"; 
     else 
     out << m[word] << " "; 
    } 
    out << "\n"; 
} 
+1

Пожалуйста, разместите минимальную компилируемую программу, которую я могу вставить в свой редактор и попробовать. (Также укажите версию компилятора и компилятора.) – sbi

+0

@sbi - cygwin g ++ 3.4.4 – starcorn

ответ

3

Выведение либо «\ п» или с использованием Endl приведет к точно такому же содержанию (единственное отличие состоит в епсИ также промывает). Когда этот символ \ n записывается, если файл находится в «текстовом режиме», библиотека времени выполнения преобразует его в собственный механизм платформы для указания строк. В unix это необязательно, потому что этот механизм является \ n байтом. В Windows это \ n становится \ r \ n (возврат каретки, подача строки). Я подозреваю, что вы все это знаете, но я на всякий случай просматриваю его.

Короче говоря, до тех пор, пока ваша библиотека времени исполнения установлена ​​для Windows, код, который у вас есть, будет работать так, как вы ожидаете. Я подозреваю, что вы используете gg cygwin g ++ или какой-либо другой порт g ++, который не настроен для строк в стиле Windows, даже в текстовом режиме. Некоторые редакторы не будут правильно интерпретировать этот нетранслируемый \ n.

+0

Вы правильно поняли, я использую gg cygwin. Попробовал снова открыть файл с помощью блокнота ++ и увидел, что данные были корректно выведены. Я собираюсь отметить это как ответ, как только тикер спустится – starcorn

+0

@starcom: я не могу вспомнить, как настроена библиотека времени выполнения cygwin g ++, но я помню, что есть возможность (в начале начальной установки) настроить cygwin на используйте стили в стиле unix или в стиле Windows. –

Смежные вопросы