请教:在这里为什么ch被定义为整形?
while((ch=getchar())!=EOF&&ch!='\n');这条语句的作用是丢弃当前输入行的剩余字符。在这里变ch被定义为整形而非字符型,书上说把ch声明为整形可以防止从输入读取的字符意外被解释为EOF。我不能理解为什么会意外被解释为EOF?
[解决办法]
其实根本原因是getchar的返回是int类型。
[解决办法]
巧了,今天刚看到,我当复习一下知识了,
getchar ()返回的是int值,如果将ch定义为char的话, getchar()返回的值整型值超过8位的表示范围,就会发生截断,而EOF是int类型的, 然后要与EOF比较,就要提升为int类型的值, 编译器就会错误以为这两者相等;
[解决办法]
其实根本原因是getchar的返回是int类型
会发生两种情况,一种是合法的输入被”截断“后的CH与EOF相同,程序将在复制的中途中止,第二种是CH被”截断“后有可能永远拿不到EOF的值,所以就造成了死循环。
[解决办法]
如果将ch定义为char型,请问你如何区别
读入字符'\xFF'
和
遇到文件末尾返回EOF
这两种情况呢!