为什么必须使用变量来保存getchar';s返回值是否声明为int?

为什么必须使用变量来保存getchar';s返回值是否声明为int?,c,function,C,Function,我是C编程语言的初学者,最近我学习了getchar函数,它将从控制台或文件中接收字符,在键入时立即显示它,我们需要按Enter键继续 它返回它们读取的无符号字符。如果遇到文件结尾或错误getchar()函数返回EOF 我的问题是,当它返回unsigned char时,为什么它的返回值存储在int变量中 请帮助我。阅读此链接: 这里写着: 如果将字符I/O函数返回的值与EOF进行比较,则不要将该值转换为char。一旦这些函数的返回值被转换为字符类型,字符值可能与EOF无法区分。此外,如果sizeo

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

它返回它们读取的
无符号字符。如果遇到文件结尾或错误
getchar()
函数返回EOF

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

请帮助我。

阅读此链接:

这里写着:

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


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

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


为此,它恰好使用int,但它可以使用至少9位的任何类型。

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

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

一个好链接:另请参见。可能的详细信息重复:“文件中的字符可能是任何可能的字符值”-->字符可能有许多可能的值,但从
getchar()返回的值
是字符的
无符号字符
值,而不是其
字符
值。