次のコードで比較される値は何ですか?
while ((c = getchar()) != EOF)
if ( c == '\n')
'\n'一重引用符があるため、それが定数変数であることはわかっています。アスキーテーブル上の文字の数値を表していることは知っていますよね?それは 110 に等しい。
((c = getchar()) != EOF)戻る?
ありがとう
次のコードで比較される値は何ですか?
while ((c = getchar()) != EOF)
if ( c == '\n')
'\n'一重引用符があるため、それが定数変数であることはわかっています。アスキーテーブル上の文字の数値を表していることは知っていますよね?それは 110 に等しい。
((c = getchar()) != EOF)戻る?
ありがとう
重要な点は、次cのようにする必要がありますint。
int c;
while ((c = getchar()) != EOF) { char read_value = c; /* ... */ }
は よりも多くの値、または少なくともシステムのナロー マルチバイト エンコーディングが使用intするより多くの値を保持できると想定されており、それ以上のデータの読み取りに失敗した場合は特別な定数を返します。それ以外の場合は、 に変換して、読み取った文字の値を取得できることが保証されています。chargetcharEOFcchar
c自身を として宣言するのはよくある間違いです。この場合、特別な値 をキャプチャできないか、または と区別できない完全に有効な文字が存在するためchar、ループが終了しない可能性があります。EOF(char)EOF
*) たとえば、特定のプラットフォームで acharと an の両方intが 32 ビット幅である場合、たとえば、狭いストリームが [-128, 128) の範囲の値を持つ単位のみを返すことができる限り、まったく問題ありません。-200として使用できますEOF。
c では、代入演算は、等号の右側の値である右辺値を返します。したがって、この場合、c=getchar() は、文字が何であれ EOF を返します。
あなたの質問は:
しかし、何ですか:
((c = getchar()) != EOF)returens?
式((c = getchar()) != EOF)は論理(または「ブール」)式であり、「true」または「false」のいずれかです。具体的には、何かが定数「EOF」と等しくないかどうかをテストします。
「何か」は表現(c = getchar())です。これは割り当てです。関数を呼び出し、getchar()戻り値を変数に割り当てますc。割り当ての値は、割り当てられた値です。したがって、全体としての式により、次のことが発生します。
getchar()と呼ばれるcEOFEOF、whileステートメントは引き続き機能します。