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