2011-01-10 2 views
3

印刷したいときに問題があります\n私はendlを使用しています。そして問題は、私がWindows7上でコードを実行するときに改行を印刷しないことです。しかし、それはUbuntuで改行を印刷します。どちらのOSも同じコンパイラGNU g ++を使用しています。ofstream Windows7の改行をtxtに出力しない

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

「\ n」またはendlを出力すると、内容はまったく同じになります(唯一の違いはendlもフラッシュされます)。その\ n文字が書き込まれると、ファイルが "テキストモード"の場合、ランタイムライブラリはそれをプラットフォームのネイティブメカニズムに変換して行を示します。 Unixでは、このメカニズムは\ nバイトなので、これは不要です。 Windowsでは\ n \(キャリッジリターン、改行)になります。私はあなたがこのすべてを知っていると思うが、私はそれをちょうど見直している。

つまり、ランタイムライブラリがWindows用にセットアップされている限り、あなたが持っているコードは期待どおりに動作します。 Cygwinのg ++​​やその他のg ++​​ポートを使っていると思われます。これは、テキストモードでもWindowsスタイルの行には設定されていません。一部の編集者は翻訳されていない\ nを正しく解釈しません。

+0

あなたは正しく推測しました。私はcygwinのg ++​​を使用しています。代わりにnotepad ++でファイルを開こうとしましたが、データが正しく出力されていることがわかりました。 – starcorn

+0

@starcom:cygwinのg ++​​のランタイムライブラリがどのようにセットアップされているかを思い出すことはできませんが、cygwinを設定するためのオプション(初期インストールの初期段階)があることを覚えています。 UNIXスタイルまたはWindowsスタイルのいずれかの行を使用します。 –

関連する問題