C语言 百文网手机站

C语言EOF如何使用

时间:2022-03-25 16:27:49 C语言 我要投稿

C语言EOF如何使用

  如果EOF是一个特殊字符,那么假定每个文本文件的结尾都有一个EOF(也就是-1),还是可以做到的,因为文本对应的ASCII码都是正值,不可能有负值。但是,二进制文件怎么办呢?怎么处理文件内部包含的-1呢?下面是小编为大家带来的关于C语言EOF如何使用的知识,欢迎阅读。

  存在问题:

  又一次遇到有人问EOF的用法,到底如何来使用那?

  解决方案:

  这里有一篇文章写的不错,希望对EOF没有理解的同学能有所帮助。

  我学习C语言的时候,遇到的一个问题就是EOF。

  它是end of file的缩写,表示"文字流"(stream)的结尾。这里的"文字流",可以是文件(file),也可以是标准输入(stdin)。

  比如,下面这段代码就表示,如果不是文件结尾,就把文件的内容复制到屏幕上。

  int c;

  while ((c = fgetc(fp)) != EOF) {

  putchar (c);

  }

  很自然地,我就以为,每个文件的结尾处,有一个叫做EOF的特殊字符,读取到这个字符,操作系统就认为文件结束了。

  但是,后来我发现,EOF不是特殊字符,而是一个定义在头文件stdio.h的常量,一般等于-1。

  #define EOF (-1)

  于是,我就困惑了。

  如果EOF是一个特殊字符,那么假定每个文本文件的结尾都有一个EOF(也就是-1),还是可以做到的,因为文本对应的ASCII码都是正值,不可能有负值。但是,二进制文件怎么办呢?怎么处理文件内部包含的-1呢?

  这个问题让我想了很久,后来查了资料才知道,在Linux系统之中,EOF根本不是一个字符,而是当系统读取到文件结尾,所返回的一个信号值(也就是-1)。至于系统怎么知道文件的结尾,资料上说是通过比较文件的长度。

  所以,处理文件可以写成下面这样:

  int c;

  while ((c = fgetc(fp)) != EOF) {

  do something

  }

  这样写有一个问题。fgetc()不仅是遇到文件结尾时返回EOF,而且当发生错误时,也会返回EOF。因此,C语言又提供了feof()函数,用来保证确实是到了文件结尾。上面的代码feof()版本的写法就是:

  int c;

  while (!feof(fp)) {

  c = fgetc(fp);

  do something;

  }

  但是,这样写也有问题。fgetc()读取文件的.最后一个字符以后,C语言的feof()函数依然返回0,表明没有到达文件结尾;只有当fgetc()向后再读取一个字符(即越过最后一个字符),feof()才会返回一个非零值,表示到达文件结尾。

  所以,按照上面这样写法,如果一个文件含有n个字符,那么while循环的内部操作会运行n+1次。所以,最保险的写法是像下面这样:

  int c = fgetc(fp);

  while (c != EOF) {

  do something;

  c = fgetc(fp);

  }

  if (feof(fp)) {

  printf(" End of file reached.");

  } else {

  printf(" Something went wrong.");

  }

  除了表示文件结尾,EOF还可以表示标准输入的结尾。

  int c;

  while ((c = get)) != EOF) {

  putc);

  }

  但是,标准输入与文件不一样,无法事先知道输入的长度,必须手动输入一个字符,表示到达EOF。

  Linux中,在新的一行的开头,按下Ctrl-D,就代表EOF(如果在一行的中间按下Ctrl-D,则表示输出"标准输入"的缓存区,所以这时必须按两次Ctrl-D);Windows中,Ctrl-Z表示EOF。(顺便提一句,Linux中按下Ctrl-Z,表示将该进程中断,在后台挂起,用fg命令可以重新切回到前台;按下Ctrl-C表示终止该进程。)

  那么,如果真的想输入Ctrl-D怎么办?这时必须先按下Ctrl-V,然后就可以输入Ctrl-D,系统就不会认为这是EOF信号。Ctrl-V表示按"字面含义"解读下一个输入,要是想按"字面含义"输入Ctrl-V,连续输入两次就行了。

  拓展:

  (一)如何学习c语言最好

  用PIC单片机开发电子产品和用C语言编程,最主要的是要坚持学习,不能中断。应通过各种实例程序来学习C语言的语法规则。要熟练掌握C语言的数据类型表达方法、各种运算符、各种语句结构。

  最好能背诵。要学会用C函数实现所需功能的方法。实际上,每个C函数都相当于一个功能模块,一个C函数便可实现一种功能。

  此外,用C语言开发PIC单片机应用产品,必须具有PIC单片机汇编语言知识。如果你已经掌握了用汇编语言编写PIC单片机源程序的方法,最好将编写成功的PIC单片机汇编语言源程序,逐个用C语言源文件代换,从中体会C语言的优越性。

  (二)c语言学习技巧

  1、首先准备一台PC,学编程一般对PC没有太大的要求,一般主流的配置就好。

  2、有了电脑之后,就得考虑安装什么操作系统了,主流使用的操作系统是windows,不过在这里不建议学习C编程使用windows,建议使用Linux。所以学习者最好安装双系统,或者彻底习惯Linux系统。

  3、不管学习哪门编程语言,我都建议学习者必须有一本关于此语言的全面知识的书籍,大学里一般采用的是谭浩强老师的《C语言程序设计》,建议学习者可以去仔细研读。

  4、在平时学习看书的时候,一定有学会做笔记的习惯,而且不仅要记录,还要经常看自己所做的笔记,这样才会有较好的学习效率。

  5、多逛技术论坛或者技术问答社区,想别人分享自己的代码,有要积极去阅读别人的代码,互相取长补短。

  6、在C语言基础学习得差不多之后,可以深入学习数据结构,以及自己尝试做一些简单的项目,比如学生学籍管理系统、图书管理系统,银行管理系统等。

【C语言EOF如何使用】相关文章:

如何使用C语言求N的阶乘09-25

C语言for循环的使用10-06

C语言typedef的使用10-04

如何学习c语言11-18

C语言的使用的详解11-22

C语言if语句的使用讲解10-03

C 语言中宏的使用10-02

如何学习c语言最好?11-18

c语言如何控制硬件10-08