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

■网友
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是接近硬件底层的语言,为了效率不会去做容错处理
推荐阅读
- 鄂温克冬季马赛-30℃极寒开赛:寒冬中的火热派对
- 大雪@大雪腌肉 适当进补 今日大雪
- OC为何跌出语言榜前十
- |电商事业中的“闪光少年”
- dart这编程语言现在发展怎么样了,语法与Java,c#很相似,甚至更简洁
- 人民车市|新语言、新起点,捷达VS7 强势入局
- hadoop中的mapreduce链接(mapreduce chaining)怎样避免中间文件的产生
- 经观汽车|日系车企中的“异类”?东风日产将导入e-POWER技术大干增程式混动 | 经观汽车
- C语言 指针引用数组的地址问题
- 中年|这些东西,比你想象中的还要大得多!
