以下の3つの機能のうち:
getc getchar&scanf
stdinから文字を読み取るのに最適なのはどれですか。その理由は何ですか。
これらの機能のいずれかについて、一方を他方よりも優れたものにする既知の欠点または制限はありますか?
Stdinから1文字を読み取りたいだけの場合は、getchar()
が適切な選択です。より複雑な要件がある場合は、getchar()
では不十分です。
getc()
を使用すると、別のストリーム(たとえば、fopen()
で開いたストリーム)から読み取ることができます。scanf()
を使用すると、一度に1文字以上を読み取ることができます。getchar()
を使用する場合の最も一般的なエラーは、char
変数を使用して結果を保存しようとすることです。 getchar()
が返す値の範囲は「_unsigned char
_の範囲の値に単一の負の値int
を加えたもの」であるため、EOF
変数を使用する必要があります。 char
変数にはこれに十分な範囲がありません。これは、完全に有効な文字の戻りをEOF
と混同する可能性があることを意味します。同じことがgetc()
にも当てはまります。
これらの機能はすべて、何らかの形で、コンソールまたはファイルから1文字を読み取ります。違いはかなり小さいです、そしてここに説明があります:
getc()は、指定されたFILEから文字を返します。使用法の観点からは、同じfgetc()呼び出しと同等であり、fgetc()がもう少し一般的に表示されます。 2つの機能の実装のみが異なります。
fgetc()は、指定されたFILEから文字を返します。使用法の観点からは、fgetc()がもう少し一般的に見えることを除いて、同じgetc()呼び出しと同等です。 2つの機能の実装のみが異なります。
はい、私はその最後の段落をだましてカットアンドペーストを使用しました。
getchar()は、stdinから文字を返します。実際、getc(stdin)を呼び出すのと同じです。