为什么用于保存getchar的返回值的变量必须声明为int?
我是C编程语言的初学者,最近我研究了getchar
函数,它将从控制台或文件接受一个字符,在键入时立即显示它 ,我们需要按Enter键继续。
它返回它们读取的unsigned char
。 如果遇到文件结束或错误,则getchar()
函数返回EOF。
我的问题是,当它返回unsigned char
,为什么它的返回值存储在int
变量中?
请帮我。
正是因为那个EOF值。 因为文件中的char可能是任何可能的char值,包括C-strings用于终止的空字符,所以getchar()
必须使用更大的整数类型来添加EOF值。
它恰好用于此目的,但它可以使用至少9位的任何类型。
返回类型为int以适应特殊值EOF。
EOF是一个宏,它扩展为一个整数常量表达式,类型为int,依赖于实现的负值,但通常为-1。
阅读此链接: 链接
这里写道:
如果将该值与EOF进行比较,请不要将字符I / O函数返回的值转换为char。 一旦这些函数的返回值转换为char类型,字符值可能与EOF无法区分。 此外,如果sizeof(int)== sizeof(char),那么用于捕获返回值的int可能与EOF无法区分。 见FIO35-C。 使用feof()和ferror()来检测sizeof(int)== sizeof(char)时的文件结束和文件错误,以获取有关何时sizeof(int)== sizeof(char)的更多详细信息。 见STR00-C。 使用适当的类型表示字符,以获取有关正确使用字符类型的更多信息。
此规则适用于所有字符I / Ofunction的使用。