关于((ch = getchar()) != EOF),ch声明为整型的问题

在使用C语言的输入功能时,经常会看到以下的一个常用代码段

int ch;
while ((ch = getchar()) != EOF && ch != '\n')
        ;

此处为什么不声明ch为char类型而是声明为int类型,为什么ch被声明为整型,而事实上需要用它来读取字符?

这是因为char变量可以由范围在0~255中的无符号整数来表示,但EOF可能具有数值-1,该值对无符号char变量是不可能的值,但对int则是可能。
在使用有符号char类型的实现中(由范围-128~127表示),将ch声明为char类型仍然可以,但是为了可移植性,最好使用int。同时这里会有一个问题,把ch声明为char类型有可能从输入读取的字符会意外地被解释为EOF(原因在于这些扩展字符ASCII > 127溢出被解释为EOF)。

你可能感兴趣的:(C语言)