web-dev-qa-db-ja.com

stdinから文字を読み取るためのgetcVs getchar Vs Scanf

以下の3つの機能のうち:

getc getchar&scanf

stdinから文字を読み取るのに最適なのはどれですか。その理由は何ですか。

これらの機能のいずれかについて、一方を他方よりも優れたものにする既知の欠点または制限はありますか?

24
Jay

Stdinから1文字を読み取りたいだけの場合は、getchar()が適切な選択です。より複雑な要件がある場合は、getchar()では不十分です。

  • getc()を使用すると、別のストリーム(たとえば、fopen()で開いたストリーム)から読み取ることができます。
  • scanf()を使用すると、一度に1文字以上を読み取ることができます。

getchar()を使用する場合の最も一般的なエラーは、char変数を使用して結果を保存しようとすることです。 getchar()が返す値の範囲は「_unsigned char_の範囲の値に単一の負の値intを加えたもの」であるため、EOF変数を使用する必要があります。 char変数にはこれに十分な範囲がありません。これは、完全に有効な文字の戻りをEOFと混同する可能性があることを意味します。同じことがgetc()にも当てはまります。

27
caf

BeejのCプログラミングガイドから

これらの機能はすべて、何らかの形で、コンソールまたはファイルから1文字を読み取ります。違いはかなり小さいです、そしてここに説明があります:

getc()は、指定されたFILEから文字を返します。使用法の観点からは、同じfgetc()呼び出しと同等であり、fgetc()がもう少し一般的に表示されます。 2つの機能の実装のみが異なります。

fgetc()は、指定されたFILEから文字を返します。使用法の観点からは、fgetc()がもう少し一般的に見えることを除いて、同じgetc()呼び出しと同等です。 2つの機能の実装のみが異なります。

はい、私はその最後の段落をだましてカットアンドペーストを使用しました。

getchar()は、stdinから文字を返します。実際、getc(stdin)を呼び出すのと同じです。

5
Dchris