c =(getchar()!= EOF)

时间:2017-02-07 21:56:29

标签: c

我试图解决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代码正常工作。

4 个答案:

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

你混淆了整数和字符。

3不是字符3,而是整数。 '3'是C中的字符3。

文档here

答案 2 :(得分:0)

(getchar()!= 3)布尔表达式。 鉴于此,您的代码只会为expr_val

分配0或1

答案 3 :(得分:-1)

没有人解释如何转换&#39; 3&#39; 3.您使用atoi https://linux.die.net/man/3/atoi或其中一个堂兄