如何定义`getchar()`的返回类型?

时间:2015-10-14 07:00:46

标签: c

以下是代码:

#include <stdio.h>
int main()
{
    char c;
    while((c = getchar()) != EOF) 
    {
        putchar(c);
    }
    return 0;
}

但有些人说我应该将char c更改为int c

谁能告诉我原因?

2 个答案:

答案 0 :(得分:5)

因为getchar()定义为:

 int getchar(void);

这应该是足够的理由。原因很清楚here

如果将getchar的返回值分配给char,则可能出现两种类型的错误/失败。

  

如果类型char已签名,并且如果将EOF定义为(通常)为-1,则   小数值为255的字符('\ 377'或'中的'\ xff')将是   符号扩展并将比较等于EOF,过早终止   输入。

     

如果type char是无符号的,则实际的EOF值将被截断(by   丢弃其高阶位,可能导致255或   0xff)并且不会被识别为EOF,从而有效地产生   无限输入。

答案 1 :(得分:1)

getchar返回EOF表示文件结束或错误,否则返回unsigned char强制转换为int。如果您使用char来存储返回值,则无法区分EOF和某些字符之间的区别。