16

私はCプログラミング言語の初心者です。最近、コンソールまたはファイルから文字を受け入れ、入力中にすぐに表示し、続行するにはキーを押す必要がgetcharある機能について勉強しました。Enter

unsigned char彼らが読んだ を返します。ファイルの終わりまたはエラーが発生した場合、getchar()関数は EOF を返します。

私の質問は、それが返されたときunsigned char、なぜその返された値がint変数に格納されるのですか?

私を助けてください。

4

3 に答える 3

19

まさにそのEOF値のためです。ファイル内の char は、C 文字列が終了に使用するヌル文字を含む任意の可能な char 値である可能性があるためgetchar()、EOF 値を追加するには、より大きな整数型を使用する必要があります。

その目的でたまたま int を使用しているだけですが、少なくとも 9 ビットの任意の型を使用できます。

于 2013-08-02T09:22:27.100 に答える
4

戻り値の型は、特別な値 EOF に対応するために int です。

EOF は、int 型の整数定数式と実装依存の負の値に展開されるマクロですが、非常に一般的には -1 です。

于 2013-08-02T09:22:52.733 に答える
2

このリンクを読む:リンク

ここには次のように書かれています。

値が EOF と比較される場合は、文字 I/O 関数によって返された値を char に変換しないでください。これらの関数の戻り値が char 型に変換されると、文字値は EOF と区別できなくなる場合があります。また、sizeof(int) == sizeof(char) の場合、戻り値をキャプチャするために使用される int は、EOF と区別できない場合があります。FIO35-C を参照してください。sizeof(int) == sizeof(char) の場合の詳細については、feof() および ferror() を使用して、ファイルの終わりおよびファイル エラーを検出します。STR00-C を参照してください。文字タイプの適切な使用に関する詳細については、適切なタイプを使用して文字を表します。

この規則は、すべての文字 I/O 関数の使用に適用されます。

于 2013-08-02T09:22:16.870 に答える