私はCプログラミング言語の初心者です。最近、コンソールまたはファイルから文字を受け入れ、入力中にすぐに表示し、続行するにはキーを押す必要がgetchar
ある機能について勉強しました。Enter
unsigned char
彼らが読んだ を返します。ファイルの終わりまたはエラーが発生した場合、getchar()
関数は EOF を返します。
私の質問は、それが返されたときunsigned char
、なぜその返された値がint
変数に格納されるのですか?
私を助けてください。
まさにそのEOF値のためです。ファイル内の char は、C 文字列が終了に使用するヌル文字を含む任意の可能な char 値である可能性があるためgetchar()
、EOF 値を追加するには、より大きな整数型を使用する必要があります。
その目的でたまたま int を使用しているだけですが、少なくとも 9 ビットの任意の型を使用できます。
戻り値の型は、特別な値 EOF に対応するために int です。
EOF は、int 型の整数定数式と実装依存の負の値に展開されるマクロですが、非常に一般的には -1 です。
このリンクを読む:リンク
ここには次のように書かれています。
値が EOF と比較される場合は、文字 I/O 関数によって返された値を char に変換しないでください。これらの関数の戻り値が char 型に変換されると、文字値は EOF と区別できなくなる場合があります。また、sizeof(int) == sizeof(char) の場合、戻り値をキャプチャするために使用される int は、EOF と区別できない場合があります。FIO35-C を参照してください。sizeof(int) == sizeof(char) の場合の詳細については、feof() および ferror() を使用して、ファイルの終わりおよびファイル エラーを検出します。STR00-C を参照してください。文字タイプの適切な使用に関する詳細については、適切なタイプを使用して文字を表します。
この規則は、すべての文字 I/O 関数の使用に適用されます。