作为这个问题的答案,
发生的事情正是您所说的,!=的优先级高于=的优先级。
这意味着 != 比 = 更难绑定并且
而(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)。