C语言中EOF的意义与用法

  EOF,为End Of File的缩写,通常在文本的最后存在此字符表示资料结束。
  在微软的DOS和Windows中,读取数据时终端不会产生EOF。此时,应用程序知道数据源是一个终端(或者其它“字符设备”),并将一个已知的保留的字符或序列解释为文件结束的指明;最普遍地说,它是ASCII码中的替换字符(Control-Z,代码26)。
  在C语言中,或更精确地说成C标准函数库中表示文件结束符(end of file)。在while循环中以EOF作为文件结束标志,这种以EOF作为文件结束标志的文件,必须是文本文件。在文本文件中,数据都是以字符的ASCII代码值的形式存放。我们知道,ASCII代码值的范围是0~127,不可能出现-1,因此可以用EOF作为文件结束标志。
  档案存取或其它 I/O 功能可能传回等于象征符号值 (巨集) EOF 指示档案结束的情形发生。实际上 EOF 的值通常为 -1,但它依系统有所不同。巨集 EOF会在编译原始码前展开实际值给预处理器。
C语言中,EOF常被作为文件结束的标志。还有很多文件处理函数处错误后的返回值也是EOF,因此常被用来判断调用一个函数是否成功。
eg:

 1 LinkList LinkListCreatH(){
 2    // Node *L = (Node *)malloc(sizeof(Node));
 3    // L->next=NULL;
 4     Node *L=listinit();
 5     int x;
 6     while(scanf("%d",&x)!=EOF){
 7         Node *P=listinit();
 8         P->data = x;
 9         P->next = L->next;
10         L->next = P;
11    }
12    return L;
13 }

当上面的程序运行时,如果不加" != EOF",那么这个程序就是个死循环,会一直运行下去;

加上" != EOF"后该程序就不是死循环了,如果在终端不进行输入该程序会自动结束(while的意思就是说当当前输入缓存还有东西时就一直读取,直到输入缓存中的内容为空时停止)。

在这"scanf("%d",&n) != EOF"相当于"scanf("%d",&n) != EOF",或"~scanf("%d",&n)",或"scanf("%d",&n) == 1 " 。

要注意的是:在终端(黑框)中手动输入时,系统并不知道什么时候到达了所谓的“文件末尾”,因此需要用<Ctrl + z>组合键然后按 Enter 键的方式来告诉系统已经到了EOF,这样系统才会结束while.

posted @ 2023-08-01 09:57  hanhuangsi  阅读(462)  评论(0编辑  收藏  举报