今まで私は、EOFでこの関数が-1を返すので、getchar()をintとして使うことを発見しました。私は疑問に思っていたチャイルドは-1を保持する?私もできると思うのは、-128から127までです。なぜC言語のgetchar()関数が整数ですか?
私はグーグルのトップリストから検索しましたが、私が得た答えは私を満足させませんでした。
今まで私は、EOFでこの関数が-1を返すので、getchar()をintとして使うことを発見しました。私は疑問に思っていたチャイルドは-1を保持する?私もできると思うのは、-128から127までです。なぜC言語のgetchar()関数が整数ですか?
私はグーグルのトップリストから検索しましたが、私が得た答えは私を満足させませんでした。
まず、ちょうど何かをクリアするために、EOF
は、具体的である必要はありません-1。 ISO C標準では、その値に負の値が必要です。
また、char
のタイプは符号付きまたは符号なしであることに注意してください。これは実装定義です。
機能fgetc
,getc
およびgetchar
は、テキストストリームだけでなく、バイナリストリームを処理するために使用できます。バイト数は0〜UCHAR_MAX
です。この範囲の自然なタイプはunsigned char
です。戻り値getc
はunsigned char
にはなりませんでした。EOF
は表現できないためです。 signed char
は0からUCHAR_MAX
までの値を保持できないため、いずれもsigned char
にはなりませんでした。したがって、より広いタイプが選択されます:タイプint
。主流のプラットフォームでは、int
はchar
よりも広く、少なくとも2のサイズを持っています。したがって、EOF
に使用できる負の値と、0〜UCHAR_MAX
の範囲のすべてのバイト値を表すことができます。
いくつかのC実装(DSPチップなどのシステム用)では、これは正しくありません。int
は1バイト幅です。これは課題を表しています。このようなCの実装では、getc
によって返される有効なバイト値の範囲は負でなければならず、これらの値の1つはEOF
と衝突します。慎重に記述されたコードでは、これが当てはまることが分かります。EOF
に等しい値が返されましたが、feof
およびferror
関数はfalseを返します。ストリームにエラーがなく、ファイルの終わりが発生していません。したがって、EOF
のような値は、実際には有効なバイトです。
EOF <0の説明に感謝します。必ずしもEOF = -1でなくてもかまいません。 –
getchar()
ファミリは、EOF -1
が(char)-1
または(unsigned char)255
と区別できるように整数を返します。
私はちょっと混乱しています。私は-1の検索を試みましたが、見つけられませんでしたか?私はテーブルの正の数を見ます!@ J Earls –
「テーブル」とは、米国のASCIIチャートなどを意味する場合は、すべて正の数になります。しかし、C 'char'型は8ビット** signed **整数型です。 0〜127、128〜255ではなく、-128〜-1の数字を表します。 –
Asciiエンコーディングを使用するチャースは、符号なし8ビット整数であるバイトを使用して格納されます。したがって、charsは0〜255の数値を取ることができます。
ファイルの終わり(EOF)のためのマジックナンバーである、-1を可能にするために署名したintを返しGETCHAR
だから、もし誰かが実際にコードが '-1 'の文字を入力すると、 –
は-1を出力します。私はそれも試みました。getChar()が-1を返したとき、それは-1キーボード! @ M.M –
私はコードが '-1'で、' -'と '1'ではないと言った。 –