精华内容
下载资源
问答
  • C语言EOF什么

    2015-07-28 11:39:00
    C语言 EOF什么?  Linux中,在新的一行的开头,按下Ctrl-D,就代表EOF(如果在一行的中间按下Ctrl-D,则表示输出"标准输入"的缓存区,所以这时必须按两次Ctrl-D);Windows中,Ctrl-Z表示EOF。(顺便提一句,...

    C语言 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,连续输入两次就行了。

    转载于:https://www.cnblogs.com/huangye-dream/p/4682322.html

    展开全文
  • C语言 EOF什么

    2014-06-11 10:21:57
    我学习C语言的时候,遇到的一个问题就是EOF。 它是end of file的缩写,表示"文字流"(stream)的结尾。这里的"文字流",可以是文件(file),也可以是标准输入(stdin)。 比如,下面这段代码就表示,如果不是...

    我学习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("\n End of file reached.");

      } else {

        printf("\n Something went wrong.");

      }

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

      int c;

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

        putchar(c);

      }

    但是,标准输入与文件不一样,无法事先知道输入的长度,必须手动输入一个字符,表示到达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语言EOF如何使用的知识,欢迎阅读。存在问题:又一次遇到有人问EOF的用法,到底如何来使用那?解决方案:这里有一篇文章写的不错,希望对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语言EOF解析

    千次阅读 2016-09-24 17:43:20
    C语言文件操作解析(五)之EOF解析  在C语言中,有个符号大家都应该很熟悉,那就是EOF(End of File),即文件结束符。但是很多时候对这个理解并...1.EOF什么?  在VC中查看EOF的定义可知:  #define EOF (-1)  E

    C语言文件操作解析(五)之EOF解析

           在C语言中,有个符号大家都应该很熟悉,那就是EOF(End of File),即文件结束符。但是很多时候对这个理解并不是很清楚,导致在写代码的时候经常出错,特别是在判断文件是否到达文件末尾时,常常出错。

    1.EOF是什么?

       在VC中查看EOF的定义可知:

       #define EOF     (-1)

       EOF只是代表一个整形常量-1。因此很多人认为在文件的末尾存在这个结束标志EOF,这种观点是错误的。事实上在文件的末尾是不存在这个标志的。那么有人会问那下面的程序如何解释?

        char ch;
    while((ch=fgetc(fp))!=EOF)
    {
    printf("%c\n",ch);
    }

       书上都通过这样的代码去判断是否读取到文本文件末尾,就是当读取到EOF的时候就结束操作。这种理解是错误的。

       先看一下函数fgetc的原型:

       int fgetc(FILE *fp);

      事实上在fgetc函数内部,每次都是读取一个字节的数据,而且这一个字节的数据是以unsigned即无符号型处理的,然后将这一个字节的数据赋给一个int型变量作为返回值返回,因此无论从文件中读取的是什么数据,作为无符号型赋值给一个int型变量,返回值不可能是负数。比如当读取到数据0xFA时,因为是以无符号处理的,因此在将0xFA赋值给int型变量的时,int型变量的高位是填充0的(为什么填充0,跟汇编语言里面的符号扩展类似,在后面会提到),因此返回的结果是0X00 00 00 FA,始终不会是负数.而若读取到文件末尾的时候,即没有数据可供读取的时候,那么返回EOF,即-1,这个-1是一个int型常量,二进制表示是0x FF FF FF FF。

        上面的代码具有很大的局限性,因为其只能判断是否到达文本文件的末尾,而不能对二进制文件进行准确的判断。因为正常情况下,文本文件中无论如何是无法读取到-1(0x FF)这个数据,因此可以判断。但是对于二进制文件不同,很可能读到的一个字节的数据就是0xFF,那么返回值此时就是-1,但是此时还未到达文件末尾,造成错误的判断。

        那么有没有办法解决?可以将ch定义为int型即可。

        下面来比较一下下面这段程序和上面程序在执行时的区别。

        int ch;
    while((ch=fgetc(fp))!=EOF)
    {
    printf("%c\n",ch);
    }

         假如在文件中读取到的数据是0xFA。

        那么对于上面一段程序的执行过程是:

        将0xFA先赋值给一个int型变量(假如是a),那么此时a为0x 00 00 00 FA,当将返回值a返回给变量ch时,由于ch是char型的,只有8位,那么只将a的低8位赋给ch,那么此时ch为0x FA,而ch是作为有符号处理的,那么此时ch的值肯定是负数。

        而若将ch定义为int型,执行过程为:

        将0xFA先赋值给一个int型变量(假如是a),那么此时a为0x 00 00 00 FA,当将返回值a返回给变量ch时,由于ch也是int型的,因此ch为0x 00 00 00 FA,是一个正数,两段程序执行得到的结果完全不同。

        下面看一下若读取到的数据是0x FF(此时未到文件末尾)时,是什么结果。

        若ch为char型,则当将返回值0x 00 00 00 FF返回时,取低8位赋给ch,那么此时ch为-1,此时会误判为到达文件末尾;

        而若ch为int型,则当将返回值0x 00 00 00 FF返回时,ch的值为0x 00 00 00 FF,此时ch不为-1,不会误判为文件末尾。

        (当然上面所述成立必须是在读取不出错的情况下才成立)

       所以很多情况下会用到函数feof.

    二.feof

       feof函数的原型是

       int feof(FILE *fp);

       若到达文件末尾则返回一个非零值,否则返回0。

       在VC中查看feof函数的定义:

       #define _IOEOF          0x0010

       #define feof(_stream)     ((_stream)->_flag & _IOEOF)

       可知feof函数判断是否到达文件末尾时与_flag这个标志有关。

       下面看一下这段程序:

    复制代码
    #include<stdio.h>
    #include<stdlib.h>

    int main(void)
    {
    FILE *fp;
    int ch;
    if((fp=fopen("test.txt","w+"))==NULL)
    {
    printf("can not open file\n");
    exit(0);
    }
    for(ch=65;ch<=70;ch++)
    {
    fputc(ch,fp);
    }
    rewind(fp);
    while(feof(fp)==0)
    {
    ch=fgetc(fp);
    printf("%0X\n",ch);
    }
    fclose(fp);
    return 0;
    }
    复制代码

    执行结果是:

    41
    42
    43
    44
    45
    46
    FFFFFFFF
    Press any key to continue

    为什么最后打印结果会多打印一个FFFFFFFF?不是只往文件中写入了数据65-70么?

    先看一下C++ Reference中关于feof函数的描述(C++ Reference是一个比较好的网站,里面是关于C++所有库函数的描述,网址在博客首页的链接中有,http://www.cplusplus.com/reference/):

    Checks whether the End-of-File indicator associated with stream is set, returning a value different from zero if it is.
    This indicator is generally set by a previous operation on the stream that reached the End-of-File.

    从描述中可知,只有当与文件关联的流到达文件末尾时,此时若再进行读取操作,文件结束的标志(上面所述的_flag)才会被重新置位。

    因此在上述程序中,当读取完最后一个字节的数据后,文件结束标志并没有被置位,只有当位置指针到达末尾时,再发生读取操作时,而此时又没有数据可供读取,因此返回-1,所以打印出的结果中会多一个FFFFFFFF,在这之后才会将_flag重新置位,此时feof函数才能检测出已经到达了文件末尾。

    那么可以通过下面的办法解决这个问题:

        ch=fgetc(fp);
    while(feof(fp)==0)
    {
    printf("%0X\n",ch);
    ch=fgetc(fp);
    }

    这样就不会多打印一个FFFFFFFF了。

    在上面提到汇编语言中符号扩展的问题,其实在C语言中属于数据类型转换的范畴。下面简要说明一下:

    符号扩展只针对将字长小的数据赋给字长大的数据时存在,若是字长大的数据赋给字长小的数据,取低位即可。

    下面看一段程序:

    复制代码
    #include<stdio.h>

    int main(void)
    {
    unsigned char ch1=0XFF;
    char ch2=0XFF;
    char ch3=0X73;
    int a=ch1;
    int b=ch2;
    int c=ch3;
    printf("%d\n%d\n%d\n",a,b,c);
    return 0;
    }
    复制代码


    执行结果为:

    255

    -1

    115

    原因是由于ch1、ch2、ch3都是char型变量,只占一个字节,区别在于ch1是无符号的,在将ch1赋值给a时,ch1是看做无符号数据进行处理的,那么在填充a的高位是用0去填充;而对于ch2和ch3都是有符号的,那么在填充高位时就要注意了,若ch2的最高位为0,那么表示ch2是正数,此时填充高位用0填充,而若ch2的最高位为1,则填充高位数据用1填充。

    如程序执行的结果所示,由于ch2的最高位为1,那么在填充b的高位的时候会用1去填充,那么b为0X FF FF FF FF;而ch3的最高位为0,那么填充c的高位用0填充,所以c的值为0x 00 00 00 73.


    原文:http://www.cnblogs.com/dolphin0520/archive/2011/10/13/2210459.html

    展开全文
  • eofc语言中表示什么电渗流在C语言中是什么意思,Eofc语言代表文件结束符。在while循环中,EOF用作文件的结束符号。以EOF作为文件结束符号的文件必须是文本文件。在文本文件中,数据以字符的ASCII码值的形式...
  • EOF宏,C语言EOF宏详解

    2019-01-15 19:00:40
    EOF 是 End Of File 的缩写,在 C 语言...但实际上,这个观点并不正确(或者说并不完整),在文件所包含的数据中,并没有什么文件结束符。从 EOF 宏的定义中可以看出,EOF 宏的值为 -1,属于 int 类型的数据,在 ...
  • C语言EOF什么意思

    2020-02-09 16:46:25
    C语言中,或更精确地说成C标准函数库中表示文件结束符(end of file)。 在while循环中以EOF作为文件结束标志,这种以EOF作为文件结束标志的文件,必须是文本文件。在文本文件中,数据都是以字符的ASCII代码值的...
  • C语言EOF什么

    万次阅读 多人点赞 2014-09-17 10:23:01
    我学习C语言的时候,遇到的一个问题就是EOF。 它是end of file的缩写,表示"文字流"(stream)的结尾。这里的"文字流",可以是文件(file),也可以是标准输入(stdin)。 比如,下面这段代码就表示...
  • C语言EOF

    2019-05-30 21:04:59
    C语言在读取文件时到达文件末尾导致的无法读取现象,会导致读取失败。这时scanf函数会返回-1而不是0,且C语言中使用EOF(End Of Flie)来代表-1
  • C语言EOF什么意思?

    万次阅读 2016-02-29 14:02:03
    EOF是End Of File的意思,在C语言中定义的一个宏,用作文件结束标志。 该宏定义在stdio.h中,从数值角度看,就是-1 #define EOF (-1) 在Linux系统之中,EOF根本不是一个字符,而是当系统读取到文件结尾,所返回...
  • C语言EOF

    2019-10-05 02:19:54
    最近对C的EOF比较困惑,就查了下资料,EOF表示文件结束,stdin结束,读写错误出现。 EOF是一个常数 -1.并不是一个字符。 因为所有的字符的ASCII码都大于0,getchar读不到字符的时候,就返回-1了,也就是EOF. 就先...
  • C语言中的EOF什么

    2017-03-25 21:22:16
    Linux中,在新的一行的开头,按下Ctrl-D,就代表EOF(如果在一行的中间按下Ctrl-D,则表示输出"标准输入"的缓存区,所以这时必须按两次Ctrl-D);Windows中,Ctrl-Z表示EOF。(顺便提一句,Linux中按下Ctrl-Z,表示...
  • 第一个问题是EOF  它是end of file的缩写,表示"文字流"(stream)的结尾。这里的"文字流",可以是文件(file),也可以是标准输入(stdin)。 比如,下面这段代码就表示,如果不是文件结尾,就把文件的...
  • 关于C语言EOF

    2015-10-04 18:07:16
    EOF,它是end of file的缩写,表示”文字流”(stream)的结尾。这里的”文字流”,可以是文件(file),也可以是标准输入(stdin)。 比如,下面这段代码就表示,如果不是文件结尾,就把文件的内容复制到屏幕上。int c; ...
  • C语言中的EOF

    2020-02-16 22:07:19
    C语言中,EOF(end of file)用来表示文件结束。它是头文件stdio.h里面定义的一个宏,其定义如下: /* End of file character. Some things throughout the library rely on this being -1. */ #ifndef EOF # ...
  • #include&lt;stdio.h&gt; //打印标准输出行,加上行号 ...//1代表在行的开始 0代表不在行的开始 while((ch = getchar()) != EOF)//EOF:测试文件尾 { if(flg == 1) { if(ch == 'q' || ...
  • 关于c语言EOF用法的理解

    万次阅读 多人点赞 2013-04-05 12:46:47
    作者:zhangxinlin ... 首先看一下EOF的官方解释: 计算机术语,缩写通常为EOF(End Of File),在操作系统中表示资料源无更多的资料可读取。...在C语言中,或更精确地说成C标准函式库中表示文件结束符(en
  • #includemain(){ int c; while((c=getchar())!=EOF) putchar(c);} 在stdio.h中,EOF被宏定义为-1,那么,为什么我必须ctrl+z才算输入了EOF?而不能直接输入-1呢?要怎样才能输入-1就代表输入了EOF呢?
  • c语言文件中EOF和feof

    千次阅读 2013-03-18 15:42:38
    C语言文件操作解析(五)  在C语言中,有个符号大家都应该很熟悉,那就是EOF(End of File),即文件结束符。...1.EOF什么?  在VC中查看EOF的定义可知:  #define EOF (-1)  EOF只是代表一个整形常量-1。因
  • 解读C语言中的EOF

    2012-04-22 20:49:00
    我学习C语言的时候,遇到的一个问题就是 EOF。  它是 end of file 的缩写,表示"文字流"(stream)的结尾。这里的"文字流",可以是文件(file),也可以是标准输入(stdin)。  比如,下面这段代码就表示,...
  • unix及类unix中,control+d代表EOF;微软的操作系统中则是control+z ...
  • C语言中输入结束符EOF

    千次阅读 2014-11-25 22:25:15
    对于C语言中区分文件中有效数据与输入结束符的问题,我一直以来都处于一种比较疑惑的问题,学习C语言的时候并没有注意这个问题,一直是用一个特殊符号例如‘#’来结束输入。这次重新阅读《C语言程序设计》发现这个...
  • C语言文件操作解析(五)之EOF解析 在C语言中,有个符号大家都应该很熟悉,那就是EOF(End of File),即文件结束符。但是很多时候对这个理解并不是很清楚,导致在写代码的时候经常出错,特别是在判断... EOF只是代表
  • C语言

    万次阅读 多人点赞 2019-12-18 23:01:50
    C语言 42.C语言是一种计算机高级语言。 43.C语言允许直接访问物理地址,能进行位操作。 44.C语言是结构化程序设计语言 45.c程序要通过编译,连接才能得到可执行的目标程序 46.用c语言编写程序,可以编写出任何类型的...
  • C语言文件结尾标志EOF用法

    千次阅读 2013-01-11 10:48:09
    C语言的头文件stdio定义了判断文件结尾的标志EOF(end of file),而不用管操作系统是如何检测文件结尾的。 示例程序: /* 重复输入,直到文件结尾*/ #include int main (void) {  int ch;  while((ch...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 9,898
精华内容 3,959
关键字:

c语言eof代表什么

c语言 订阅