以下是代码:
#include <stdio.h>
int main()
{
char c;
while((c = getchar()) != EOF)
{
putchar(c);
}
return 0;
}
但有些人说我应该将char c
更改为int c
。
谁能告诉我原因?
答案 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
和某些字符之间的区别。