来自 The C Programming Language:
int c;
while ((c = getchar()) != EOF)
putchar(c);
"... 解决方法是 getchar
在没有更多输入时返回一个独特的值,一个不能与任何真实字符混淆的值。这个值称为 EOF
,表示“文件结尾”。我们必须将 c
声明为一个足够大的类型,以容纳 getchar
返回的任何值。我们不能使用 char
因为 c
必须足够大以容纳 EOF
以及任何可能的 char
。”
我检查了 stdio.h
并在我的系统上打印了 EOF 的值,它被设置为 -1
。在我的系统上,chars
是有符号的,尽管我知道这取决于系统。因此,EOF
可以适合我的系统的 char
。我通过将 c
定义为 char
重写了上面的小例程,程序按预期运行。 ASCII字符表中还有一个字符here似乎有一个对应于 255 的空白字符,它看起来像 EOF
。
那么,为什么看起来 ASCII 有一个指定为 EOF 的字符 (255)?这似乎与 The C Programming Language 一书中所说的相矛盾。
最佳答案
当getchar()
读取到字节255时,返回255。当getchar()
发现没有更多的输入时,返回-1。
如果将结果存储在char
中,则无法区分两者。但是当您将它们存储在 int
中时,您可以。 (此语句与 char
的符号无关)。
只有当您知道结果有效时,您才能将其转换为 char
并获得通常的 C 风格字符类型。
关于c - EOF 符号常量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19715850/