【问题标题】:Why is getchar() function in C an Integer? [duplicate]为什么 C 中的 getchar() 函数是整数? [复制]
【发布时间】:2016-09-06 05:27:41
【问题描述】:

到目前为止,我发现,我们使用 getchar() 作为 int,因为在 EOF 时,此函数返回 -1。我想知道 char 不能持有 -1 吗?我认为可以,因为它的范围也可以从-128到127。

我搜索了google的top list,但得到的答案并不让我满意。

【问题讨论】:

  • 那么当有人真正输入代码为-1的字符时会发生什么
  • 只打印-1,我也试过了。我认为当getChar() 返回-1 时,它与通过键盘输入-1 不同! @MM
  • 我说的是代码为-1的字符,不是字符-1
  • 哦!我的坏..我找不到代表-1的字符!这就是你想要表达的吗?当我们使用 char 作为类型时,没有 -1 的表示? @MM
  • 可能有一个,如果有,那么你无法判断他们是否输入了那个,或者 EOF 发生了。一些系统给ÿ代码-1

标签: c getchar


【解决方案1】:

首先,为了澄清一些事情,EOF 不需要具体为 -1。 ISO C 标准要求它具有负值。

还要注意char类型可以有符号也可以无符号;这是实现定义的。

函数fgetcgetcgetchar可用于处理二进制流,而不仅仅是文本流。字节的值从 0 到 UCHAR_MAX。此范围的自然类型是unsigned chargetc 的返回值不能是 unsigned char,因为 EOF 无法表示。也不可能是signed char,因为signed char 不能保存从0 到UCHAR_MAX 的值。因此,选择了更广泛的类型:int 类型。在主流平台上,intchar 宽:它的大小至少为 2。因此它能够表示一些可用于 EOF 的负值,以及范围 0 到 UCHAR_MAX

在某些 C 实现中(对于某些 DSP 芯片等系统)这是不正确的:int 是一个字节宽。这代表着挑战。在这样的 C 实现中,getc 返回的一系列有效字节值必须为负数,其中一个值与EOF 发生冲突。仔细编写的代码可以看出这种情况:返回了等于EOF 的值,但feofferror 函数报告错误:流没有错误,并且没有发生文件结束.因此,看起来像EOF 的值实际上是一个有效字节。

【讨论】:

  • 感谢您对 EOF
【解决方案2】:

getchar() 和家庭返回一个整数,以便 EOF -1(char)-1(unsigned char)255 区分开来。

【讨论】:

  • 我现在有点困惑,我试图搜索 -1 的 (char) 但我找不到?我只看到桌子上的正数! @J 厄尔斯
  • 如果“表格”是指美国 ASCII 图表之类的,是的,这些都是正数。但是,C char 类型是 8 位 signed 整数类型。它表示从 0 到 127 和从 -128 到 -1 的数字,而不是从 0 到 127 和 128 到 255。
【解决方案3】:

字符,使用 Ascii 编码,使用一个字节存储,它是无符号的 8 位整数。因此 chars 可以取数值 0-255。

getchar 返回一个带符号的 int 以允许 -1,这是文件结尾 (EOF) 的幻数

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-04-30
    • 1970-01-01
    • 1970-01-01
    • 2023-03-28
    • 1970-01-01
    • 2020-06-05
    • 2015-05-06
    • 1970-01-01
    相关资源
    最近更新 更多