3

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

それで、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";
}
4

1 に答える 1

3

'\n' または endl を使用して出力すると、まったく同じ内容になります (唯一の違いは、endl もフラッシュされることです)。その \n 文字が書き込まれると、ファイルが「テキスト モード」の場合、ランタイム ライブラリはそれをプラットフォームのネイティブ メカニズムに変換して行を示します。UNIX では、そのメカニズムが \n バイトであるため、これは不要です。Windows では、その \n は \r\n (キャリッジ リターン、ライン フィード) になります。ご存知かと思いますが、念のためレビューさせていただきます。

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

于 2011-01-10T21:55:25.017 に答える