首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

请问:在这里为什么ch被定义为整形

2013-07-04 
请教:在这里为什么ch被定义为整形?while((chgetchar())!EOF&&ch!\n)这条语句的作用是丢弃当前输入行

请教:在这里为什么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
这两种情况呢!

热点排行