什么是C编程语言中的EOF?

Chr*_*_45 34 c input eof

你怎么看到最后一个印刷品?换句话说,EOF需要投入什么?我检查了定义,它说EOF是-1.

如果你输入Ctrl-D,你将看不到任何东西.

#include <stdio.h>

int main() {
 int c;
 while((c = getchar() != EOF)) {
  printf("%d\n", c);
 }
 printf("%d - at EOF\n", c);
}
Run Code Online (Sandbox Code Playgroud)

Car*_*icz 45

在Linux系统和OS X上,输入以导致EOF的字符是Ctrl- D.对于Windows,它是Ctrl- Z.

根据操作系统的不同,此字符仅在一行中的第一个字符(即第一个字符)后才起作用Enter.由于控制台输入通常是面向行的,因此系统可能无法识别EOF字符,直到您使用了Enter.

是的,如果该角色被识别为EOF,那么您的程序将永远不会看到实际的角色.相反,一个C程序将得到-1getchar().

  • 然后说出来!:) Ctrl-C通常会杀死一个接受控制台输入的程序.Ctrl-D将标记输入的结束,但程序可以在此之后继续运行. (3认同)

Luc*_*cas 27

您应该将括号更改为

while((c = getchar()) != EOF)
Run Code Online (Sandbox Code Playgroud)

因为"="运算符的优先级低于"!="运算符.然后你会得到预期的结果.你的表达等于

while (c = (getchar()!= EOF))
Run Code Online (Sandbox Code Playgroud)

你得到两个1作为输出,因为你正在进行比较"c!= EOF".这将始终成为您输入的字符的一个,然后通过点击返回后面的"\n".除了最后一次比较,其中c确实是EOF,它会给你一个0.

关于EOF的编辑:EOF通常为-1,但标准不保证这一点.该标准仅在7.19.1节中定义了EOF:

EOF扩展为整数常量表达式,类型为int和负值,由多个函数返回以指示文件结束,即不再有来自流的输入;

假设EOF等于-1是合理的,但是当使用EOF时,不应该测试特定值,而是使用宏.


Ste*_*n C 7

EOF的值是一个负整数,以区别于0到255范围内的"char"值.它通常为-1,但它可以是任何其他负数......根据POSIX规范,所以你不应该假设它是-1.

^ D字符是您在UNIX/Linux上的控制台流中键入的内容,以告诉它逻辑上结束输入流.但在其他情况下(例如,当您从文件中读取时),它只是另一个数据字符.无论哪种方式,^ D字符(意味着输入的结尾)永远不会成为应用程序代码.

正如@Bastien所说,如果getchar()失败也会返回EOF .严格来说,您应该调用ferrorfeof查看EOF是表示错误还是流结束.但在大多数情况下,无论哪种情况,您的应用程序都会做同样的事情