为什么C语言中getchar()的返回类型是int?

10 sec read

最近在重新阅读K&R的《C程序设计语言》时对getchar()这个自带的函数的返回值产生了疑惑。从字面上看,给函数返回的类型应该是char型,但在示例中,却将返回内容赋值给了int型变量,示例代码如下:

书中给出的解释为:

因为某些潜在的重要原因,我们在此使用int类型。

这里作者并没有对重要原因给出明确的说明,我试着将int修改为char,发现程序还是能够正常编译与执行,这更加让我疑惑!经过一翻搜索,找到的答案如下。

1、getchar()除了返回正常的字符外,还会返回输入结束符EOF(end of file)。该函数原型如下:

2、EOF通常在<stdio.h>文件中被定义为-1:

3、各种数据类型能表示的数值范围由编译器决定。char类型在有些编译器中定义的范围为0~255,另外一些编译器中定义的范围为-128~127。当编译器中定义的范围为0~255时,用char接收getchar()返回值时就会出错。数据类型具体的定义范围可在<limits.h>文件中找到:

4、将int改为char后能在我的电脑上正常编译,时由于我的编译器中定义的范围为-128~127,当用char接收时会隐式的转化为char类型。

5、即使编译器总定义的范围为-128~127,程序也有可能出错。虽然常见字符到127位就结束了。但是ASCII表中分配到的时256。128~256为拓展字符,如常用的欧元符号等均在内。

综上:getchar()返回的内容用更大范围区间的int型接收,才能使程序更加稳健。

打赏作者
微信支付标点符 wechat qrcode
支付宝标点符 alipay qrcode

使用tqdm显示Python代码执行进度

在使用Python执行一些比较耗时的操作时,为了方便观察进度,通常使用进度条的方式来可视化呈现。Python中
标点符
34 sec read

利用SWIG实现Python调用C/C++

SWIG简介 SWIG是Simplified Wrapper and Interface Generator的
标点符
1 min read

WordPress又被黑了,解决方案记录

过了一个周末,今天整个网站打开无样式,后台无法打开,直接跳转到其他网站,才意识到网站可能被黑了。查看源代码:
标点符
1 min read

发表评论

电子邮件地址不会被公开。 必填项已用*标注