0

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)

4

2 回答 2

11

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

这意味着!= 绑定=

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

相当于;

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

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

于 2013-05-05T06:56:34.653 回答
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。

于 2013-05-05T07:49:48.353 回答