赋值和不等于优先级

时间:2013-05-05 06:53:21

标签: c

The C Programming Language,2nd Edition 的第17页中,作者说

  

!=优先级高于=

优先级

因此,当我想测试它时,它不是那样的。这是我的简单程序:

#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 version 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2336.11.00)

2 个答案:

答案 0 :(得分:11)

正在发生的事情正是您所说的The precedence of != is higher than that of =

这意味着!= =

更难绑定
while(inp = getchar() != EOF) {

相当于;

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

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

答案 1 :(得分:1)

您的两个条件相当于:

char notEndOfFile = (getchar() != EOF); // notEndOfFile is a boolean
if(!(inp = notEndOfFile))    // inp is now a boolean, not the character input
   break;                    // break if notEndOfFile is false

这会在正确的时间终止,但不会根据需要分配inp。

inp = getchar();     // As desired
if(inp != EOF) break // break if inp is EOF

正确终止并分配inp。