この質問に対する答えとして、
起こっていることはまさにあなたが言っていることです. != の優先順位は = の優先順位よりも高い.
つまり、!= は = よりも強くバインドされ、
while(inp = getchar() != EOF) {
と同等です。
while(inp = (getchar() != EOF)) {
これにより、 inp は、探している文字値ではなく、比較のブール値に設定されます。
この答えは真実であると信じられています。しかし、私を混乱させる部分があります。最後の文です。
これにより、 inp は、探している文字値ではなく、比較のブール値に設定されます。
ここで、inp に bool 値が設定されている場合 (これは本当だと思います)、使用時に値が表示されないのはなぜputchar(inp)
ですか? 画面に 0 または 1 が表示されないのはなぜですか?
質問:
The C Programming Language, 2nd Edition の 17 ページで、筆者は次のように述べています。
The precedence of != is higher than that of =
だから私がそれをテストしたいときは、そうではありません。これは私の簡単なプログラムです:
#include <stdio.h>
int main() {
int inp;
while(inp = getchar() != EOF) {
putchar(inp);
}
}
入力を読み取ってユーザーに表示しようとしています。それを試してみると、何も起こらず、画面は空ですが、これを試してみると、すべて正常に動作します:
#include <stdio.h>
int main() {
int inp;
while((inp = getchar()) != EOF) {
putchar(inp);
}
}
どうしたの?gcc バージョン 4.2.1 (Apple Inc. ビルド 5658 に基づく) (LLVM ビルド 2336.11.00) を使用しています。