首页 > 其他分享 >C语言中EOF的意义与用法

C语言中EOF的意义与用法

时间:2023-08-01 10:13:18浏览次数:32  
标签:Node 文件 结束 EOF scanf 用法 while C语言

  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.

标签:Node,文件,结束,EOF,scanf,用法,while,C语言
From: https://www.cnblogs.com/hanhuangsi/p/17595681.html

相关文章

  • 【数据结构】vector用法
    1.初始化:vector<类型>标识符vector<类型>标识符(最大容量)vector<类型>标识符(最大容量,初始所有值)inti[5]={1,2,3,4,5}vector<类型>vi(i,i+2);//得到i索引值为3以后的值vector<vector<int>>v;二维向量//这里最外的<>要有空格。否则在比较旧的编译器下无法通过2.常......
  • FFmpeg方法用法大全【欢迎补充】
    1.定义FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。采用LGPL或GPL许可证。它提供了录制、转换以及流化音视频的完整解决方案。它包含了非常先进的音频/视频编解码库libavcodec,为了保证高可移植性和编解码质量,libavcodec里很多code都是从头开......
  • nmap用法
    Ping扫描nmap-easily-ping-scan-all-addresses-in-my-subnetnmap-sP192.168.122.0/24 DHCP扫描Nmap扫描教程之网络基础服务DHCP服务类  sudonmap-sU-p67--script=dhcp-discover192.168.122.0/24 iprsudonmap--scriptbroadcast-dhcp-discover-e......
  • pandas模块---------------------------------常用求平均average的用法
    求平均值代码:importpandasaspd#导入模块df=pd.read_excel(r'C:\Users\Administrator/Desktop/test/1.xlsx')#文件路径a=lambdax:x.mean(1).round(2)#lambda函数m=a(df.iloc[:,1:3])#传入第1-3列计算平均值m=pd.DataFrame(m,columns=['平均分'])#转成dataframe,命名列df['......
  • 怎么学习C语言,才能快速掌握?
    有多年软件行业经验,期间参与过多个C语言项目。要掌握一门编程语言,仅仅投入时间学习是不够的,关键在于实际项目经验。在没有真正实战经验之前,不宜轻易声称掌握某种编程语言,因为编程是积累性的工作,理论知识重要但实践更为关键。学习任何编程语言都需要先掌握理论基础,然后通过项目实战......
  • C语言---malloc(0)会产生什么结果,真的是空指针吗?
    前言(1)几天前在一个交流群中看到有人说,面试问malloc(0)会怎么样是真的恶心。(2)这个突然激起了我的好奇心。居然还可以malloc(0)?!(3)经过测试最后,发现是可行的。经过互联网的查找,肯哥的交流群以及自己的理解,梳理成这篇博客。(4)肯哥博客主页:架构师李肯;(5)感慨一下,群里面的大佬们不愧是有......
  • spring RestTemplate用法详解
    前面介绍过spring的MVC结合不同的view显示不同的数据,如:结合json的view显示json、结合xml的view显示xml文档。那么这些数据除了在WebBrowser中用JavaScript来调用以外,还可以用远程服务器的Java程序、C#程序来调用。也就是说现在的程序不仅在BS中能调用,在CS中同样也能调用,不过你需要......
  • Bitset用法
    众所周知\(Bitset\)可以将一些\(O(n)\)的操作优化为\(O(N/w)\)相当于优化了\(>=\)一只\(log\)!!!\(bitset\)每一位占一个\(bit\),而不是一个\(Byte\)!!!若一次操作复杂度为\(O(N)\)\(bitset\)的操作复杂度为\(O(N/w)\)\(w\)为计算机字长,\(w\)位系统字长为\(w\)相比之下,空间......
  • 我的第六次C语言练习
    //复习//intA(intx,inty);//intB(intx,inty);//intmain(void)//{// inta,b,c,d,f;// a=0;// b=0;// scanf("%d%d",&a,&b);// c=A(a,b);// d=A(b,c);// f=B(c,d)+a*B(a,c);// printf("end=%d\n",f)......
  • 初识c语言
    一、数据类型char字符型short短整型int整型long长整型longlong更长整型float单精度浮点数double双精度浮点数下面是对每个数据类型所占字节的确定:#include<stdio.h>intmain(){ printf("%d\n",sizeof(int)); printf("%d\n",sizeof(double)); printf("%d\n",sizeof(......