在 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)
。
答案 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。