免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: oiuoqrewq
打印 上一主题 下一主题

[C] 为什么getchar函数要返回一个int而不是一个char? [复制链接]

论坛徽章:
11
巨蟹座
日期:2013-12-23 11:12:14双子座
日期:2014-08-28 09:14:55子鼠
日期:2014-07-25 16:21:22摩羯座
日期:2014-07-23 15:17:47摩羯座
日期:2014-05-30 13:09:05午马
日期:2014-04-30 18:10:00天秤座
日期:2014-04-25 12:12:00申猴
日期:2014-04-22 11:30:15午马
日期:2014-03-07 16:06:40辰龙
日期:2013-12-25 18:36:00摩羯座
日期:2014-09-02 17:00:55
11 [报告]
发表于 2014-02-21 23:05 |只看该作者
本帖最后由 Susake_ 于 2014-02-21 23:08 编辑

...

论坛徽章:
2
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:56:11
12 [报告]
发表于 2014-02-22 11:25 |只看该作者
本帖最后由 cobras 于 2014-02-22 11:26 编辑

如果 char 值0xFF(或者-1)在现在或者可以预见的将来不会成为有效的输入,则使用char型没有什么不妥。否则还是使用int为妙。

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
13 [报告]
发表于 2014-02-22 11:52 |只看该作者
4059056 发表于 2014-02-21 22:27
getchar()返回的是用户输入的第一个字符的ASCII码,或者是EOF,请教一下,为什么不用signed char作为返回 ...


不知道。

论坛徽章:
0
14 [报告]
发表于 2014-02-22 23:00 |只看该作者
本帖最后由 iLRainyday 于 2014-02-22 23:03 编辑
4059056 发表于 2014-02-21 22:27
getchar()返回的是用户输入的第一个字符的ASCII码,或者是EOF,请教一下,为什么不用signed char作为返回 ...


同学,ASCII扩展字符集可是用8位来表示一个字符的。你怎么区分EOF和编码为0xFF的字符?

论坛徽章:
0
15 [报告]
发表于 2014-02-23 00:28 |只看该作者
没有不妥,

只是对于大多数编译器的实现来说,
int在C语言相当于机器字。
所以返回int和返回char没有区别
(应该说在使用寄存器保存返回值的情况下,很多机器只能返回int这种数据类型)。
要将int类型化为char(比如8个字节)反而要额外的计算。


感觉是定义为char返回类型更贴切些!

论坛徽章:
11
巨蟹座
日期:2013-12-23 11:12:14双子座
日期:2014-08-28 09:14:55子鼠
日期:2014-07-25 16:21:22摩羯座
日期:2014-07-23 15:17:47摩羯座
日期:2014-05-30 13:09:05午马
日期:2014-04-30 18:10:00天秤座
日期:2014-04-25 12:12:00申猴
日期:2014-04-22 11:30:15午马
日期:2014-03-07 16:06:40辰龙
日期:2013-12-25 18:36:00摩羯座
日期:2014-09-02 17:00:55
16 [报告]
发表于 2014-02-23 07:31 |只看该作者
看看源码怎么描述的(作者自己选择用int)

  1. RETURNS
  2. The next character (read as an <<unsigned char>>, and cast to  

  3. <<int>>), unless there is no more data, or the host system reports a  

  4. read error; in either of these situations, <<getchar>> returns <<EOF>>.  

复制代码

论坛徽章:
1
摩羯座
日期:2013-12-19 10:04:07
17 [报告]
发表于 2014-02-24 09:28 |只看该作者
4059056 发表于 2014-02-21 22:08
char 类型数据是可以表示负数的,char类型默认条件下是signed char,unsigned char 是不能表示负数的。回复 ...

没有char 默认 signed char的说法
char 和 signed char 一样 还是和 unsigned char 一样 这个依赖实现
char 可能是 有符号可能是无符号

论坛徽章:
1
摩羯座
日期:2013-12-19 10:04:07
18 [报告]
发表于 2014-02-24 09:29 |只看该作者
回复 10# 4059056


    因为 signed char 无法表示 EOF
EOF要求 第32位是1
signed char 最高才第8位

论坛徽章:
2
技术图书徽章
日期:2014-02-24 10:31:04技术图书徽章
日期:2014-03-20 16:11:43
19 [报告]
发表于 2014-02-24 10:13 |只看该作者
回复 14# iLRainyday
明白了,


   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP