gpt4 book ai didi

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

转载 作者:qq735679552 更新时间:2022-09-28 22:32:09 24 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章C语言中getchar()的返回类型为什么是int详解由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

前言 。

在C语言中有个重要的库函数getchar(),可从终端获得一个字符的ASCII码值。在终端输入字符时并非输入一个字符就会返回,而是在遇到回车换行前,所有输入的在C语言中有个重要的库函数getchar(),可从终端获得一个字符的ASCII码值。在终端输入字符时并非输入一个字符就会返回,而是在遇到回车换行前,所有输入的字符都会缓冲在键盘缓冲器中,直到回车换行一次性将所有字符按序依次赋给相应的变量,在这里一定要注意最后一个字符即'\n',该字符也会赋给一个相应的变量(当然这要你定义的用来接收字符的变量数比你输入的可见字符多一才可以).

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

?
1
2
3
4
5
6
7
8
9
10
11
#include <stdio.h>
 
/* 将输入复制到输出 */
int main( void )
{
  int c;
  while ((c = getchar ()) != EOF){
  putchar (c);
  }
  return 0;
}

书中给出的解释为:

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

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

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

?
1
2
3
4
5
6
7
8
9
10
11
12
int getchar ( void )
{
  static char buf[BUFSIZ];
  static char *bb = buf;
  static int n = 0;
  if (n == 0)
  {
   n = read(0, buf, BUFSIZ);
   bb = buf;
  }
  return (--n >= 0)?(unsigned char ) *bb++ : EOF;
}

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

?
1
2
3
4
5
#define BUFSIZ 512
#define _NFILE _NSTREAM_
#define _NSTREAM_ 512
#define _IOB_ENTRIES 20
#define EOF (-1)

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

?
1
2
3
4
5
6
7
#define CHAR_BIT 8
#define SCHAR_MIN (-128)
#define SCHAR_MAX 127
#define UCHAR_MAX 0xff
 
#define CHAR_MIN SCHAR_MIN
#define CHAR_MAX SCHAR_MAX

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

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

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

总结 。

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对我的支持.

原文链接:https://www.biaodianfu.com/why-getchar-return-int-in-c.html 。

最后此篇关于C语言中getchar()的返回类型为什么是int详解的文章就讲到这里了,如果你想了解更多关于C语言中getchar()的返回类型为什么是int详解的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com