为什么用于保存getchar的返回值的变量必须声明为int?

时间:2013-08-02 09:18:53

标签: c function

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

返回他们阅读的unsigned char。如果遇到文件结束或错误getchar()函数返回EOF。

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

请帮帮我。

3 个答案:

答案 0 :(得分:18)

正是因为那个EOF值。因为文件中的char可能是任何可能的char值,包括C-strings用于终止的空字符,getchar()必须使用更大的整数类型来添加EOF值。

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

答案 1 :(得分:4)

返回类型为int以容纳特殊值EOF。

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

答案 2 :(得分:2)

请阅读此链接:link

这里写着:

  

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

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