2

K&R を読んだ後、C には、printf、scanf、getchar などのよく知られた I/O 関数以外にも、多くの I/O 関数があるようです。 、EOFまたはNULLは、エラー、デフォルトの入力ストリーム(標準入力/キーボード)などで返されます。これは、私が思いついたI / P関数のリストです。

I/P 関数: scanf fscanf getchar fgetc getc gets

個別に説明を読んでいると分かる気がするのですが、どちらかを選ばなければならないとしたら、混乱して頭の中でごちゃごちゃになってしまいます。どの関数をいつ使用するか、およびいずれかを選択することの長所と短所を明確に要約できる人はいますか (getchar と getc と scanf)。

ボーナス ポイント: K&R の getline 関数は、上記のシナリオのどこに当てはまりますか?

4

1 に答える 1

3

Input と Output の違いは OP で明らかなので、他のものに注目しましょう。

違い 1 : 一部の関数は を使用しFILE*、一部の関数は を想定します:stdint入力stdout用、出力用)。ファイルを使用する場合はstdin/stdout、単純なものを使用してください。

  • テイクFILE*: fprintf, fscanf, fgetc, fgets, . fputc_fputs
  • 服用しないでくださいFILE*: printf, scanf, getchar, gets, .putcharputs

パターンに注意してください。で始まる関数にfFILE*... 例外がputcありgetcf*対応するものと同等です。それらを使用しないでください...それらは奇妙です。

相違点 2 : 一部の関数は引数をフォーマットし、一部は単一の文字を受け取り、一部は文字列を受け取ります。それは簡単にわかります。私はそれらをもう一度列挙するのが面倒です。あなたに最も適したものを使用してください。

相違点 3 : 一部の機能はまったく使用しないでください。IMOはgetc、、、putcです。それらはそれぞれ、奇妙、奇妙、正しく使用できない、奇妙です。getsputs

違い 4 : 戻り値。以下を除いて、すべての関数intは読み取り/書き込み文字を返します (またはEOFエラーの場合)。

  • fgetsそしてgets、引数として取るのと同じポインターを返します(またはNULLエラーの場合)。これは、コード行を節約するのに便利だと考えられていました: memcpy(buffer, fgets(buffer2, 100, file));. ただし、ポインターを使用する前にエラーをチェックする必要があるため、実際の戻り値は、それを比較する以外はほとんど役に立ちません。NULL.
  • *printf書き込まれたバイト数を返します。
  • *scanf読み込まれた入力項目の数を返します。

さて、テーブルではなくIHTHです。

于 2013-07-04T16:13:52.227 に答える