以前,经常使用while((ch=getchar()!=EOF)
来作为程序读取输入的结束。
但是,今天发现,这个EOF的类型是整形。
然而,我们经常是将ch定义为字符型:char ch;
这样就造成了一个问题:getchar()
读取输入的EOF的时候,读取的是整形数。然而,这个数字比char类型(-128~127)要大.所以,getchar()
在赋值给ch的时候,会造成该数值被截短的现象。然后ch经过提升为整形之后再与EOF作比较的时候是不会相等的。
这就有可能使得程序在输入EOF的时候并不会停止。或者是在键入\377
的时候,注入终止(因为这个值截短再提升之后与EOF相等)。
基于以上原因,我们就要避免使用
while((ch=getchar())!=EOF)