c语言中的EOF的详细情况( 二 )

【c语言中的EOF的详细情况】 c语言中的EOF的详细情况

对于第二点,在 p48c语言中的EOF的详细情况

=============另外再补充一下,位扩展和有符号转换到无符号,这二者行为是有顺序的,在 p50页底 有一个鲜明的例子:c语言中的EOF的详细情况

c语言中的EOF的详细情况


■网友
c语言中的EOF的详细情况

ch应该是int类型,另外,EOF我记得是Ctrl-Z吧
■网友
通常EOF在stdio.h里定义为-1,C把一个字节定义为char类型使用的位数,通常是8位,允许char前使用signed和unsigned表示有符号类型和无符号类型。getchar()返回的unsigned char永远不为负数,EOF是它不可能的值,所以while里的判断条件始终成立,始终不能等于EOF,循环会一直继续下去。可以使用char,但建议使用int,因为char是以int类型存储的,int可以用于存储字符型数据,此外,很多字符集都超过255个值,而char只有8位。EOF有些是Ctrl+Z,有些是Ctrl+D,看系统。
■网友
EOF表示文件结尾,用-1表示,因为字符永远不会是负数,所以不会有问题,你的代码有问题,原因是ch是unsigned char型的,永远不会等于-1,所以就死循环了,getchar()返回是int型的,这么说题主应该知道怎么做了-------------------------------------------------------------------------------------------------------------------------题主后续问为什么会一直输出问号,对于这个问题,操作系统和编译器提供的逻辑只保证getchar()返回EOF及以前使用getchar方法是否正确,如果读完后继续读结果会怎样是不确定的,各种编译器会出现各种不同的结果。这是C/C++编译器中广泛使用的逻辑,因为C是接近硬件底层的语言,为了效率不会去做容错处理


推荐阅读