【发布时间】:2013-08-03 12:06:00
【问题描述】:
我是C编程语言的初学者,最近研究了getchar函数,它从控制台或文件中接受一个字符,输入时立即显示,我们需要按 Enter 键继续。
它返回他们读取的unsigned char。如果遇到文件结尾或错误,getchar() 函数将返回 EOF。
我的问题是,当它返回unsigned char时,为什么它的返回值存储在int变量中?
请帮帮我。
【问题讨论】:
我是C编程语言的初学者,最近研究了getchar函数,它从控制台或文件中接受一个字符,输入时立即显示,我们需要按 Enter 键继续。
它返回他们读取的unsigned char。如果遇到文件结尾或错误,getchar() 函数将返回 EOF。
我的问题是,当它返回unsigned char时,为什么它的返回值存储在int变量中?
请帮帮我。
【问题讨论】:
正是因为那个 EOF 值。因为文件中的 char 可能是任何可能的 char 值,包括 C 字符串用于终止的空字符,getchar() 必须使用更大的整数类型来添加 EOF 值。
它只是碰巧使用 int 来达到这个目的,但它可以使用至少 9 位的任何类型。
【讨论】:
getchar() 返回的值是一个字符的unsigned char 值,而不是它的 char 值。
返回类型是 int 以适应特殊值 EOF。
EOF 是一个宏,它扩展为一个整数常量表达式,其类型为 int 和一个依赖于实现的负值,但通常为 -1。
【讨论】:
阅读此链接: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 函数的使用。
【讨论】: