1

作为这个问题的答案,

发生的事情正是您所说的,!=的优先级高于=的优先级。

这意味着 != 比 = 更难绑定并且

而(inp = getchar()!= EOF){

相当于;

而(inp =(getchar()!= EOF)){

这会将 inp 设置为比较的布尔值,而不是您要查找的字符值。

这个答案被认为是真实的。但是,有一部分让我感到困惑,最后一句话:

这会将 inp 设置为比较的布尔值,而不是您要查找的字符值。

在这里,如果 inp 设置了一个布尔值(我相信这是真的),为什么我们在使用时看不到该值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. build 5658)(LLVM build 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'(整数值4849ASCII 格式)。它是一个整数值10('\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 回答