我试图解决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,程序并不像我期望的那样工作。如果输入say,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更改为&#39; 3&#39;或者51代码正常工作。
答案 0 :(得分:3)
getchar()
函数将读取的字符作为无符号字符串转换为文件末尾或错误的int或EOF。
因此,您只需更改比较并使用'3'
(字符'3')代替3
,或者您可以使用数字3
的ascii值51。 [见ASCII Table]
expr_val = (getchar() != '3');
,或者
expr_val = (getchar() != 51);
现在,在这两种情况下,如果您输入expr_val = 0
作为输入,则会获得3
。
答案 1 :(得分:2)
答案 2 :(得分:0)
(getchar()!= 3)是布尔表达式。 鉴于此,您的代码只会为expr_val
分配0或1答案 3 :(得分:-1)
没有人解释如何转换&#39; 3&#39; 3.您使用atoi
https://linux.die.net/man/3/atoi或其中一个堂兄