我在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”,代码正常工作。
发布于 2017-02-07 21:59:31
你混淆了整数和字符。
3不是字符3,而是整数。'3'是C中的字符3。
文档这里。
发布于 2017-02-07 22:01:56
getchar()函数返回以未签名字符的形式读取的字符,在文件或错误结束时转换为int或EOF。
因此,您只需要更改比较,使用'3' (字符'3')代替3,或者您可以使用数字3的ascii值,即51。见[ASCII表]
expr_val = (getchar() != '3');或,
expr_val = (getchar() != 51);现在,在这两种情况下,如果键入expr_val = 0作为输入,您将得到3。
发布于 2017-02-08 03:15:39
(getchar() != 3)是一个布尔表达式。在此情况下,您的代码将只为expr_val分配0或1
https://stackoverflow.com/questions/42100778
复制相似问题