首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >c= (getchar() != EOF)

c= (getchar() != EOF)
EN

Stack Overflow用户
提问于 2017-02-07 21:56:28
回答 4查看 252关注 0票数 3

我在K&R试着解决问题1.6问题是-

  • 验证表达式getchar() != EOF为0或1。

我找到了一个可行的解决方案:

代码语言:javascript
复制
#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)

代码语言:javascript
复制
#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”,代码正常工作。

EN

回答 4

Stack Overflow用户

发布于 2017-02-07 21:59:31

你混淆了整数和字符。

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

文档这里

票数 2
EN

Stack Overflow用户

发布于 2017-02-07 22:01:56

getchar()函数返回以未签名字符的形式读取的字符,在文件或错误结束时转换为int或EOF。

因此,您只需要更改比较,使用'3' (字符'3')代替3,或者您可以使用数字3的ascii值,即51。见[ASCII表]

代码语言:javascript
复制
expr_val = (getchar() != '3');

或,

代码语言:javascript
复制
expr_val = (getchar() != 51);

现在,在这两种情况下,如果键入expr_val = 0作为输入,您将得到3

票数 2
EN

Stack Overflow用户

发布于 2017-02-08 03:15:39

(getchar() != 3)是一个布尔表达式。在此情况下,您的代码将只为expr_val分配0或1

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42100778

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档