1

この質問に対する答えとして、

起こっていることはまさにあなたが言っていることです. != の優先順位は = の優先順位よりも高い.

つまり、!= は = よりも強くバインドされ、

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) を使用しています。

4

2 に答える 2

3

ここで、inp に bool 値が設定されている場合 (これは本当だと思います)、putchar(inp) を使用すると値が表示されないのはなぜですか? 画面に 0 または 1 が表示されないのはなぜですか?

文字コード 0 と 1 は、システム ロケールでは明らかに印刷可能な文字ではないためです。0'0'は異なります。

于 2013-05-05T08:24:39.400 に答える
1

ここで、inp に bool 値が設定されている場合 (これは本当だと思います)、putchar(inp) を使用すると値が表示されないのはなぜですか? 画面に 0 または 1 が表示されないのはなぜですか?

a'1'または a '0'(整数値48および49ASCII) ではありません。整数値1または0('\1'または a '\0') です。

printf("%d\n", '0'); /* prints the integer value of '0', followed by newline */
printf("%c\n", '0'); /* prints '0', followed by newline */

printf("%d\n", 0); /* prints '0', followed by newline */
printf("%c\n", 0); /* prints '\0' (null terminator), followed by newline */
于 2013-05-05T08:25:06.007 に答える