我正在尝试解决 K&R 中的问题 1.6。
- 验证表达式
getchar() != EOF
是否为 0 或 1。
我找到了一个可行的解决方案:
#include <stdio.h>
int main(){
int expr_val, c;
printf("Input a character and press enter: ");
expr_val = (getchar() != EOF);
printf("expr_val: %d\n", expr_val);
return 0;
}
当我输入任何内容时,它返回值为1。当我执行EOF(Ctrl + D)时,它返回值为0。
然而,当我在代码中将EOF替换为数字,例如3,程序的运行结果并不符合我的期望。如果我输入5,则返回值为1。如果我输入3,则同样返回值为1。
根据我的理解,输入值为3应该返回一个与输入值为5不同的值。
(我只将EOF改为了3)
#include <stdio.h>
int main(){
int expr_val, c;
printf("Input a character and press enter: ");
expr_val = (getchar() != 3);
printf("expr_val: %d\n", expr_val);
return 0;
}
有人能给我解释一下为什么会这样吗?
谢谢大家,你们的答案都非常清晰和有帮助。通过将EOF更改为“3”或51,代码正常工作。
3
和'3'
是不同的。查看ASCII表获取更多信息。 - R_KappA
。 - chux - Reinstate Monica!=
运算符执行的)都根据定义要么是0要么是1。 - John Bollinger