免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 9877 | 回复: 12
打印 上一主题 下一主题

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

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-05-16 17:07 |只看该作者 |倒序浏览
我们在终端下如果使用getchar来获取用户输入的话,

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

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

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

Int存储的机制是什么

论坛徽章:
0
2 [报告]
发表于 2012-05-16 17:12 |只看该作者
本帖最后由 hbmhalley 于 2012-05-16 17:12 编辑

其他类型 ... 的字符?

论坛徽章:
0
3 [报告]
发表于 2012-05-16 17:14 |只看该作者
回复 2# hbmhalley


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

论坛徽章:
0
4 [报告]
发表于 2012-05-16 17:20 |只看该作者
回复 3# mdowen


    getchar() 本来就是 int

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
5 [报告]
发表于 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
6 [报告]
发表于 2012-05-16 17:31 |只看该作者
回复 5# L_kernel


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

还有一点疑问:

在 C语言设计中 这样解释

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

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

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
7 [报告]
发表于 2012-05-16 17:39 |只看该作者
当然任何整型也可以用于存储字符型数据
字符型数据是属于整型的。

论坛徽章:
1
水瓶座
日期:2014-03-20 18:21:14
8 [报告]
发表于 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
9 [报告]
发表于 2012-05-16 22:48 |只看该作者
居然能看到LS回答技术问题。。。。

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
10 [报告]
发表于 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


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

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP