0

次のコードで比較される値は何ですか?

while ((c = getchar()) != EOF)
        if ( c == '\n')

'\n'一重引用符があるため、それが定数変数であることはわかっています。アスキーテーブル上の文字の数値を表していることは知っていますよね?それは 110 に等しい。

((c = getchar()) != EOF)戻る?

ありがとう

4

3 に答える 3

5

重要な点は、次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

于 2013-01-09T22:42:55.877 に答える
2

c では、代入演算は、等号の右側の値である右辺値を返します。したがって、この場合、c=getchar() は、文字が何であれ EOF を返します。

于 2013-01-09T22:42:09.573 に答える
1

あなたの質問は:

しかし、何ですか:((c = getchar()) != EOF)returens?

((c = getchar()) != EOF)は論理(または「ブール」)式であり、「true」または「false」のいずれかです。具体的には、何かが定数「EOF」と等しくないかどうかをテストします。

「何か」は表現(c = getchar())です。これは割り当てです。関数を呼び出し、getchar()戻り値を変数に割り当てますc。割り当ての値は、割り当てられた値です。したがって、全体としての式により、次のことが発生します。

  1. getchar()と呼ばれる
  2. その戻り値はに割り当てられますc
  3. 次に、その値が定数と比較されますEOF
  4. 値が等しくない場合EOFwhileステートメントは引き続き機能します。
于 2013-01-09T22:47:48.613 に答える