2012-01-25 7 views
0

FILE *やfgets()などの関数やC++スタイル(例えば、istreamやifstreamやread()やget()のような関数)の使用に関しては、 、など)。私は、異なる機能の2つの方法を比較してトピックを見つけることができませんでした。他のものよりも良い場合はファイルIO:c(FILE *)とfgets()vs C++ istreamとread();効能?効率?

  1. 便利ですか?
  2. 効率?
  3. 有効性?

IのC++で一般的にプログラムが、それでも私のIOのすべてのためのFILE *を使用して、私が代わりにCOUTの(F)のprintfを使用する、などなど。これは単なる習慣となっている、私は思います。他の人よりも好きな人は誰ですか?どちらか他の人が最適な状況になっていますか?

+2

C++ストリームで 'printf("% - 5.1f "、value);'を試してみてください。 –

+2

@MaximYegorushkin:ユーザー定義データ型の 'printf()'の '%'構文を拡張しようとしています。 。 –

+0

おっと、素敵、闘い。私はポップコーンを手に入れます。 –

答えて

1

何かをフォーマットしたい場合は、printfが使いやすく、書き込みがコンパクトであることがcoutよりもわかります。だから私は通常coutとは気にしません。

ifstreamsofstreamsはそれほど悪くありません。

しかし、これはまた私が怖い癖の問題です。私は本当の答えがあるとは思わない。

0

実際には、これら3つの質問にも到達する前に、問題が解決されています。 出力をフィルタリングするか、サポートされていないデバイス に出力したいので、何らかのカスタムの streambufを使用します。コンパイラが提供する だけでなく、独自の型を出力したいので、たくさんのカスタムを使用します。 operator<<もちろん、特定の フォーマットを論理的な値の意味に従って集中的に管理したい場合は、 と言うのは“となります。 の小数点以下は3桁で、“金利( 何でも)”としてこの値をフォーマットし、金利を書式設定するための指定で、 をソースコード内の単一の場所に指定します(それぞれprintfではなく)。もちろん のタイプをdoubleからBigDecimalに変更したい場合は、printfを修正しようとしているコード をすべて借りずに変更することができます。 (さらに言えば、どのように出力する printfBigDecimalを変更するのですか?)

率直に言って(それがあまりにも悪くない だが)、入出力ストリームをより便利にすることができ、そしてそれは通常FILE*ほど効率的ではありません。しかし、 は実際には動作しないので、このような質問は無関係になります。