楼主可能很纳闷:getchar函数返回的是一个字符,应该将ch定义为char类型的数据,而不应该定义为一个int类型的数据!
为什么要将ch定义为一个int类型的数据呢??
对于不同的编译器来说,char类型的数据到底是和signed char一样还是和unsigned char一样是不同的。
有的编译器char类型的数据和signed char类型的数据一样,而有的编译器则和unsigned char类型的数据一样。那么这个又有什么问题呢?当然有问题了,并且有很大的问题了。EOF是一个宏定义,#define EOF -1。如果说char类型的数据和signed char类型的数据一样的,那么当getchar函数返回-1的话,ch就可以等于-1,因为此时的char是一个signed char,表示一个有符号的数;而如果char类型的数据和unsigned char类型的数据时一样的话,那么当getchar返回-1的话,ch = -1,但是此时的ch是不能够表示一个有符号的数,只能够表示无符号的数,-1就要转换为一个无符号的数,
从而ch = 255,这样ch永远也不能够等于-1了,因此while循环就会永远执行下去即一个死循环。
所以为了防止出现这样的情况,就将ch定义为int类型!