【问题标题】:Why must the variable used to hold getchar's return value be declared as int?为什么必须将用于保存 getchar 的返回值的变量声明为 int?
【发布时间】:2013-08-03 12:06:00
【问题描述】:

我是C编程语言的初学者,最近研究了getchar函数,它从控制台或文件中接受一个字符,输入时立即显示,我们需要按 Enter 键继续。

它返回他们读取的unsigned char。如果遇到文件结尾或错误,getchar() 函数将返回 EOF。

我的问题是,当它返回unsigned char时,为什么它的返回值存储在int变量中?

请帮帮我。

【问题讨论】:

标签: c function


【解决方案1】:

正是因为那个 EOF 值。因为文件中的 char 可能是任何可能的 char 值,包括 C 字符串用于终止的空字符,getchar() 必须使用更大的整数类型来添加 EOF 值。

它只是碰巧使用 int 来达到这个目的,但它可以使用至少 9 位的任何类型。

【讨论】:

  • 详细信息:“文件中的一个字符可能是任何可能的字符值” --> 一个字符可能有多个可能的值,但从getchar() 返回的值是一个字符的unsigned char 值,而不是它的 char 值。
【解决方案2】:

返回类型是 int 以适应特殊值 EOF。

EOF 是一个宏,它扩展为一个整数常量表达式,其类型为 int 和一个依赖于实现的负值,但通常为 -1。

【讨论】:

    【解决方案3】:

    阅读此链接:link

    这里是这样写的:

    如果字符 I/O 函数返回的值将与 EOF 进行比较,请不要将该值转换为 char。一旦这些函数的返回值被转换为 char 类型,字符值可能与 EOF 无法区分。此外,如果 sizeof(int) == sizeof(char),则用于捕获返回值的 int 可能与 EOF 无法区分。见 FIO35-C。使用 feof() 和 ferror() 来检测 sizeof(int) == sizeof(char) 时的文件结束和文件错误,以获取有关 sizeof(int) == sizeof(char) 时的更多详细信息。见 STR00-C。使用适当的类型表示字符以获取有关正确使用字符类型的更多信息。

    此规则适用于所有字符 I/O 函数的使用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-23
      • 1970-01-01
      • 1970-01-01
      • 2014-05-28
      相关资源
      最近更新 更多