我是C编程语言的初学者,最近我研究了getchar
函数,它将从控制台或文件中接受一个字符,在键入时立即显示,我们需要按 Enter 键才能继续。
返回他们阅读的unsigned char
。如果遇到文件结束或错误getchar()
函数返回EOF。
我的问题是,当它返回unsigned char
时,为什么它的返回值存储在int
变量中?
请帮帮我。
答案 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函数的使用。