6

私は個人的な使用のためにかなり基本的なプログラムを書いていますが、特に後でそれをより堅牢にすることを決定した場合は、良い習慣を使用することを本当に望んでいます。

すべての目的と目的で、プログラムはいくつかの入力ファイルを引数として受け入れfopen()、ファイルからの読み取りを使用してそれらを開き、その情報を処理してから、出力をいくつかの異なるファイルとしてサブフォルダーに保存します。たとえば、プログラムが含まれている~/program場合、出力ファイルは次の場所に保存されます。~/program/csv/

たとえば、ファイルに直接出力し 、ループでoutput = fopen("./csv/output.csv", "w");印刷してから閉じるだけで 、それは悪い習慣だと感じます。fprintf(output,"%f,%f", data1, data2);fclose(output);

書き込み中は一時ディレクトリに保存し、終了時に移動する必要がありますか?より高度なファイルI/Oライブラリを使用する必要がありますか?私はこれを完全に考えすぎていますか?

4

5 に答える 5

8

私の目のベストプラクティス:

  • fopen、printf、puts、fprintf、fcloseなどへのすべての呼び出しでエラーを確認してください
  • 必要に応じてgetcharを使用し、可能であればfreadを使用します
  • 必要に応じてputcharを使用し、可能であればfwriteを使用してください
  • 入力行の長さの任意の制限を回避します(malloc / reallocが必要になる場合があります)
  • バイナリモードで出力ファイルを開く必要があるときを知る
  • 標準Cを使用し、conio.hを忘れてください:-)
  • 改行は、一部のテキストの先頭ではなく、行の末尾に属します。つまり、Mighty William H.が誤解を招くようなものであり、コマンドシェルの愚かさに対処するために書くことがよくあります。printf ("hello, world\n");"\nHello, world"
  • 7ビットを超えるASCIIが必要な場合は、Unicodeを選択してください(最も一般的なエンコーディングは、ASCII互換のUTF-8です)。これは、学習する必要のある最後のエンコーディングです。コードページやISO-8859-*には近づかないでください。
于 2013-03-14T20:23:30.500 に答える
4

私はこれを完全に考えすぎていますか?

あなたは。タスクが単純な場合は、「より専門的」であると感じるという理由だけで、意図的に複雑なソリューションを作成しないでください。あなたが初心者である間、コードの可読性に焦点を合わせてください、それはあなたと他の人の生活を容易にします。

于 2013-03-14T20:13:53.573 に答える
0

大丈夫だよ。I / Oはデフォルトでstdioファイル関数で完全にバッファリングされるため、を呼び出すたびにファイルに書き込むことはありませんfprintf。実際、多くの場合、を呼び出すまで何も書き込まれませんfclose

の戻り値を確認しfopenたり、終了時にファイルを閉じたりすることをお勧めします。このような単純なプログラムの場合、残りの部分を効率的にするためにOSとコンパイラに任せてください。

于 2013-03-14T20:14:13.287 に答える
0

他のプログラムがさらなる処理のために存在をチェックしていない場合、~/program/csv/output.csvあなたがしていることは問題ありません。

それ以外の場合は、stdio.hFILE *の呼び出しまたは同様のライブラリ呼び出しによって取得されたファイルに書き込むことを検討できます。終了したら、ファイルを最終的な宛先にコピーします。ロックファイルを置いて、完了したらそれを削除することもできますが、それは他のプログラムの動作を変更できるかどうかに依存します。tmpfileoutput.csv.lck

于 2013-03-14T20:15:41.847 に答える
0

あなたは練習のためにあなた自身の、、プログラムを作ることがcatできcpますmv

于 2013-03-14T20:17:01.600 に答える