为什么用于保存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的使用。