免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 8584 | 回复: 12

C语言中getchar获取的字符是如何保存为int类型的 [复制链接]

论坛徽章:
0
发表于 2012-05-16 17:07 |显示全部楼层
我们在终端下如果使用getchar来获取用户输入的话,

一般会把用户输入的内容保存在一个int变量内去

后来查了《C陷阱与缺陷》,说的意思是EOF为-1,如果使用char来保存用户输入的话会出错

我想问,那int变量为什么保存用户的其他类型的字符则不会出错呢?

Int存储的机制是什么

论坛徽章:
0
发表于 2012-05-16 17:12 |显示全部楼层
本帖最后由 hbmhalley 于 2012-05-16 17:12 编辑

其他类型 ... 的字符?

论坛徽章:
0
发表于 2012-05-16 17:14 |显示全部楼层
回复 2# hbmhalley


    简单的说, 为什么 int类型的变量在存储 getchar获取的值则不会出错. 因为getchar获取的是字符类型的呀

论坛徽章:
0
发表于 2012-05-16 17:20 |显示全部楼层
回复 3# mdowen


    getchar() 本来就是 int

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
发表于 2012-05-16 17:27 |显示全部楼层
Question 12.1
What's wrong with this code?
char c;
while((c = getchar()) != EOF) ...
For one thing, the variable to hold getchar's return value must be an int.
getchar can return all possible character values, as well as EOF. By passing
getchar's return value through a char, either a normal character might be
misinterpreted as EOF, or the EOF might be altered (particularly if type char is
unsigned) and so never seen.
看看这个。

论坛徽章:
0
发表于 2012-05-16 17:31 |显示全部楼层
回复 5# L_kernel


    了解了一点眉目. 简单说是为了EOF的兼容问题.

还有一点疑问:

在 C语言设计中 这样解释

"无论字符在键盘,屏幕或者任何其他以任何形式来表现,不过它在机器的内部还是以位的模式来存储.char类型专门用于存储这种类型的数据,当然任何整型也可以用于存储字符型数据.因为一些潜在的原因,所以使用int来存储"

说因为潜在的原因才使用int来保存的

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
发表于 2012-05-16 17:39 |显示全部楼层
当然任何整型也可以用于存储字符型数据
字符型数据是属于整型的。

论坛徽章:
1
水瓶座
日期:2014-03-20 18:21:14
发表于 2012-05-16 22:13 |显示全部楼层
本帖最后由 ecloud 于 2012-05-16 22:20 编辑

你可以把char理解为“unsigned very shot int"这种类型,也就是 1bit 的 int
一些搞嵌入开发的,在内存及其拮据的情况下,经常使用char来存放不太长的整数用于数学运算,比如循环变量什么的

某些环境的char似乎是有符号的,但是正规的标准char就是0-255,标准的EOF是-1,所以……
不过这个取决于你的需求,你要hold住-1,就用int,你要想让-1报错,就用char

论坛徽章:
2
CU十二周年纪念徽章
日期:2013-10-24 15:41:34处女座
日期:2013-12-27 22:22:41
发表于 2012-05-16 22:48 |显示全部楼层
居然能看到LS回答技术问题。。。。

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
发表于 2012-05-17 00:44 |显示全部楼层
tempname2 发表于 2012-05-16 22:48
居然能看到LS回答技术问题。。。。


居然又是胡话连篇


ecloud 发表于 2012-05-16 22:13
你可以把char理解为“unsigned very shot int"这种类型,也就是 1bit 的 int
一些搞嵌入开发的,在内存及其拮据的情况下,经常使用char来存放不太长的整数用于数学运算,比如循环变量什么的

某些环境的char似乎是有符号的,但是正规的标准char就是0-255标准的EOF是-1,所以……
不过这个取决于你的需求,你要hold住-1,就用int,你要想让-1报错,就用char


敢说对一次吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

SACC2021中国系统架构师大会

【数字转型 架构重塑】2021年5月20日-22日第十三届中国系统架构师大会将在云端进行网络直播。

大会为期3天的议程,涉及20+专场,近120个主题,完整迁移到线上进行网络直播对会议组织来说绝非易事;但考虑到云端会议的直播形式可以实现全国各地技术爱好者的参与,也使ITPUB作为技术共享交流平台得到更好的普及,我们决定迎难而上。
http://sacc.it168.com/


大会官网>>
  

北京盛拓优讯信息技术有限公司. 版权所有 16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP