如书中所述 -
问题在于区分输入的结束和有效数据 . 解决方案是当没有更多输入时,getchar返回一个独特的值,这个值不能与任何真实字符混淆 . 这个值被称为EOF,对于"end of file."我们必须声明c是一个足够大的类型,以保存getchar返回的任何值 . 我们不能使用char,因为除了任何可能的char之外,c必须足够大以容纳EOF . 因此我们使用int .
main()
{
int c;
c = getchar();
while(c != EOF) {
putchar(c);
c = getchar();
}
}
我无法理解使用int而不是char的实际原因 . EOF将返回的内容不能存储在char中 .
1 回答
char
可以包含256个不同的值(0到255) . 如果EOF
是char
,那么EOF
的值将是0到255之间的某个值,这意味着将有一个您无法读取的字符 . 因此EOF
的值不能介于0到255之间,这意味着它不能适合char
,这意味着它的类型必须大于char
,例如int
.换句话说
EOF
不是char
,我们不想将它存储在char
中 . 它的唯一目的是使程序能够检测到文件末尾之外的一个char是否已尝试读取 .或者换句话说:让我们假设
EOF
定义为255,因此适合char
. 现在让我们假设getchar
返回值255(即EOF
) . 现在这个 Value 代表什么?它是EOF
还是字符255?