c - EOF 符号常量

标签 c eof

来自 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/

相关文章:

目录监视器的c程序

c - 带有 EOF 的 bool 表达式不起作用

解析时Python意外的EOF

c - 你如何在 C 中读取 scanf 直到 EOF?

c - 测试内核模块

c - 按位 '&' 运算符

c - 两个进程读取相同的标准输入

c - C中的Debug/和Release/目录下的lib有什么区别?

C 程序 : Need to Read Multiple Lines of Input Until EOF and Count Words and Number of Lines

java - 为什么会收到 java.io.EOFException 和 ArrayOutOfBounds 错误?帮助?