精华内容
下载资源
问答
  • 文件结束符

    2014-06-19 11:34:56
    操作系统使用不同的值作为文件结束符。Windows 系统下我们通过键入 control—z——同时键入“ctrl”键和“z”键,来输入文件结束符。 Unix 系统中,包括 Mac OS—X 机器,通常用 control—d。

    操作系统使用不同的值作为文件结束符。

    Windows 系统下我们通过键入control—z——同时键入“ctrl”键和“z”键,来输入文件结束符。

    Unix 系统中,包括 Mac OS—X 机器,通常用 control—d。
    展开全文
  • python如何判断文件结束符?本篇文章小编给大家分享一下python判断文件结束符方法,文章代码介绍的很详细,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看。python中判断文件结束符的方法...

    python如何判断文件结束符?本篇文章小编给大家分享一下python判断文件结束符方法,文章代码介绍的很详细,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看。

    python中判断文件结束符的方法:可以使用try except语句块来进行判断。

    具体使用方法:【try:while True:s = input() except

    EOFError: pass】。

    Python 中,用try except语句块捕获并处理异常,其基本语法结构如下所示:

    try:

    可能产生异常的代码块

    except [ (Error1, Error2, ... ) [as e] ]:

    处理异常的代码块1

    except [ (Error3, Error4, ... ) [as e] ]:

    处理异常的代码块2

    except [Exception]:

    处理其它异常

    从try except的基本语法格式可以看出,try 块有且仅有一个,但 except 代码块可以有多个,且每个 except

    块都可以同时处理多种异常。当程序发生不同的意外情况时,会对应特定的异常类型,Python 解释器会根据该异常类型选择对应的 except

    块来处理该异常。

    try except 语句的执行流程如下:

    首先执行 try 中的代码块,如果执行过程中出现异常,系统会自动生成一个异常类型,并将该异常提交给 Python 解释器,此过程称为捕获异常。

    当 Python 解释器收到异常对象时,会寻找能处理该异常对象的 except 块,如果找到合适的 except 块,则把该异常对象交给该 except

    块处理,这个过程被称为处理异常。

    如果 Python 解释器找不到处理异常的 except 块,则程序运行终止,Python 解释器也将退出。

    代码实现:

    try:

    while True:

    s = input()

    except EOFError:

    pass

    内容扩展:

    python如何实现对文件结束符(EOF)的判断

    在c语言你能使用while(scanf(“%d”,x) !=EOF)判断输入是否碰到文件结束符(EOF)。

    但是在python你不能使用while((x=input())!=EOF)。

    这有两种方法可实现对文件结束符(EOF)的判断。如下:

    1、用sys.stdin

    import sys

    for line in sys.stdin:

    a=int(line)

    if a!=0:

    print(a)

    2、用try…except

    try:

    while True:

    s = input()

    except EOFError:

    pass

    展开全文
  • 关于文件结束符EOFEOF 是 End Of File 的缩写。在C语言中,它是在标准库中定义的一个宏。人们经常误认为EOF 是从文件中读取的一个字符(牢记)。其实,EOF 不是一个字符,它被定义为是 int 类型的一个负数(比如 -1)。...

    >> 关于文件结束符EOF

    EOF 是 End Of File 的缩写。

    在C语言中,它是在标准库中定义的一个宏。

    人们经常误认为EOF 是从文件中读取的一个字符(牢记)。其实,EOF 不是一个字符,它被定义为是 int 类型的一个负数(比如 -1)。EOF 也不是文件中实际存在的内容。EOF 也不是只表示读文件到了结尾这一状态(这种状态可以用 feof() 来检测),它还能表示 I/O 操作中的读、写错误(通常可以用 ferror() 来检测)以及其它一些关联操作的错误状态。

    一、getchar的两点总结:

    1.getchar是以行为单位进行存取的。

    当用getchar进行输入时,如果输入的第一个字符为有效字符(即输入不是文件结束符EOF,Windows下为组合键Ctrl+Z,Unix/Linux下为组合键Ctrl+D),那么只有当最后一个输入字符为换行符'/n'(也可以是文件结束符EOF,EOF将在后面讨论)时,getchar才会停止执行,整个程序将会往下执行。譬如下面程序段:

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

    putchar(c);

    }

    执行程序,输入:abc,然后回车。则程序就会去执行puchar(c),然后输出abc,这个地方不要忘了,系统输出的还有一个回车。然后可以继续输入,再次遇到换行符的时候,程序又会把那一行的输入的字符输出在终端上。

    对于getchar,肯定很多初学的朋友会问,getchar不是以字符为单位读取的吗?那么,既然我输入了第一个字符a,肯定满足while循环(c = getchar()) != EOF的条件阿,那么应该执行putchar(c)在终端输出一个字符a。不错,我在用getchar的时候也是一直这么想的,但是程序就偏偏不着样执行,而是必需读到一个换行符或者文件结束符EOF才进行一次输出。对这个问题的一个解释是,在大师编写C的时候,当时并没有所谓终端输入的概念,所有的输入实际上都是按照文件进行读取的,文件中一般都是以行为单位的。因此,只有遇到换行符,那么程序会认为输入结束,然后采取执行程序的其他部分。同时,输入是按照文件的方式存取的,那么要结束一个文件的输入就需用到EOF(Enf Of File). 这也就是为什么getchar结束输入退出时要用EOF的原因。

    2.getchar()的返回值一般情况下是字符,但也可能是负值,即返回EOF。

    这里要强调的一点就是,getchar函数通常返回终端所输入的字符,这些字符系统中对应的ASCII值都是非负的。因此,很多时候,我们会写这样的两行代码:

    char c;

    c =getchar();

    这样就很有可能出现问题。因为getchar函数除了返回终端输入的字符外,在遇到Ctrl+D(Linux下)即文件结束符EOF时,getchar()的返回EOF,这个EOF在函数库里一般定义为-1。因此,在这种情况下,getchar函数返回一个负值,把一个负值赋给一个char型的变量是不正确的。为了能够让所定义的变量能够包含getchar函数返回的所有可能的值,正确的定义方法如下(K&R C中特别提到了这个问题):

    int c;

    c =getchar();

    二、EOF的两点总结(主要指普通终端中的EOF)

    1.EOF作为文件结束符时的情况:

    EOF虽然是文件结束符,但并不是在任何情况下输入Ctrl+D(Windows下Ctrl+Z)都能够实现文件结束的功能,只有在下列的条件下,才作为文件结束符。

    (1)遇到getcahr函数执行时,要输入第一个字符时就直接输入Ctrl+D,就可以跳出getchar(),去执行程序的其他部分;

    (2)在前面输入的字符为换行符时,接着输入Ctrl+D;

    (3)在前面有字符输入且不为换行符时,要连着输入两次Ctrl+D,这时第二次输入的Ctrl+D起到文件结束符的功能,至于第一次的Ctrl+D的作用将在下面介绍。

    其实,这三种情况都可以总结为只有在getchar()提示新的一次输入时,直接输入Ctrl+D才相当于文件结束符。

    2.EOF作为行结束符时的情况,这时候输入Ctrl+D并不能结束getchar(),而只能引发getchar()提示下一轮的输入。

    这种情况主要是在进行getchar()新的一行输入时,当输入了若干字符(不能包含换行符)之后,直接输入Ctrl+D,此时的Ctrl+D并不是文件结束符,而只是相当于换行符的功能,即结束当前的输入。以上面的代码段为例,如果执行时输入abc,然后Ctrl+D,程序输出结果为:abcabc

    注意:第一组abc为从终端输入的,然后输入Ctrl+D,就输出第二组abc,同时光标停在第二组字符的c后面,然后可以进行新一次的输入。这时如果再次输入Ctrl+D,则起到了文件结束符的作用,结束getchar()。

    如果输入abc之后,然后回车,输入换行符的话,则终端显示为:abc         //第一行,带回车

    abc         //第二行

    //第三行

    其中第一行为终端输入,第二行为终端输出,光标停在了第三行处,等待新一次的终端输入。

    从这里也可以看出Ctrl+D和换行符分别作为行结束符时,输出的不同结果。

    EOF的作用也可以总结为:当终端有字符输入时,Ctrl+D产生的EOF相当于结束本行的输入,将引起getchar()新一轮的输入;当终端没有字符输入或者可以说当getchar()读取新的一次输入时,输入Ctrl+D,此时产生的EOF相当于文件结束符,程序将结束getchar()的执行。

    【补充】本文第二部分中关于EOF的总结部分,适用于终端驱动处于一次一行的模式下。也就是虽然getchar()和putchar()确实是按照每次一个字符进行的。但是终端驱动处于一次一行的模式,它的输入只有到“/n”或者EOF时才结束,因此,终端上得到的输出也都是按行的。

    如果要实现终端在读一个字符就结束输入的话,下面的程序是一种实现的方法(参考《C专家编程》,略有改动)

    #include

    #include

    int

    main(void)

    {

    int c;

    /* 终端驱动处于普通的一次一行模式 */

    system("stty raw");/* 现在的终端驱动处于一次一个字符模式 */

    c =getchar();putchar();

    /*终端驱动处又回到一次一行模式*/     system("stty cooked");

    return 0;

    }

    编译运行该程序,则当如入一个字符时,直接出处一个字符,然后程序结束。

    由此可见,由于终端驱动的模式不同,造成了getchar()输入结束的条件不一样。普通模式下需要回车或者EOF,而在一次一个字符的模式下,则输入一个字符之后就结束了。

    (1) 字节的读取

    在正常的情况下, getc 以 unsigned char 的方式读取文件流, 扩张为一个整数,并返

    回. 换言之, getc 从文件流中取一个字节, 并加上24个零,成为一个小于256的整数,

    然后返回.

    int c;

    while ((c = fgetc (rfp))!= -1) // -1就是 EOF

    fputc (c, wfp);

    上面 fputc 中的 c 虽然是整数, 但在 fputc 将其写入文件流之前, 又把整数的高24位

    去掉了, 因此 fgetc, putc 配合能够实现文件复制. 到目前为止, 把 c 定义为

    char仍然是可行的, 但下面我们将看到,把 c 定义为 int 是为正确判段文件是否结束.

    (2) 判断文件结束.

    多数人认为文件中有一个EOF,用于表示文件的结尾. 但这个观点实际上是错误的,在文

    件所包含的数据中,并没有什么文件结束符. 对getc 而言, 如果不能从文件中读取,

    则返回一个整数 -1,这就是所谓的EOF. 返回 EOF 无非是出现了两种情况,一是文件已

    经读完; 二是文件读取出错,反正是读不下去了.

    请注意: 在正常读取的情况下, 返回的整数均小于256, 即0x0~0xFF. 而读不出返回的

    是 0xFFFFFFFF. 但, 假如你用fputc把 0xFFFFFFFF 往文件里头写, 高24位被屏蔽,写入的将

    是 0xFF. // lixforalpha 请注意这一点

    (3) 0xFF 会使我们混淆吗?

    不会, 前提是, 接收返回值的 c 要按原型定义为 int.

    如果下一个读取的字符将为 0xFF, 则

    int c;

    c = fgetc (rfp); // c = 0x000000FF;

    if (c != -1)    // 当然不等, -1 是 0xFFFFFFFF

    fputc (wfp);   // 噢, OXFF 复制成功.

    字符0xFF, 其本身并不是EOF.

    (4) 将 c 定义 char

    假定下一个读取的字符为 0xFF 则

    char c;

    c = fgetc (rfp); // fgetc(rfp)的值为 0x000000FF, 暗中降为字节, c = 0xFF

    if (c != -1)    // 字符与整数比较? c 被带符号(signed)扩展为0xFFFFFFFF, 喔噢,

    条件成立,文件复制提前退出.

    while ((c=fgetc(rfp))!=EOF) 中的判别条件成立, 文件复制结束! 意外中止.

    (5) 将 c 定义为 unsigned char;

    当读到文件末尾, 返回 EOF 也就是 -1 时,

    unsigned char c;

    c = fgetc (rfp); // fgetc (rfp)的值为EOF,即-1,即0xFFFFFFFF, 降格为字节, c=0xFF

    if ( c!= -1)  // c 被扩展为 0x000000FF, 永远不回等于 0xFFFFFFFF

    所以这次虽然能正确复制 0xFF, 但却不能判断文件结束. 事实上,在 c 为 uchar 时,

    c != -1 是永远成立的, 一个高质量的编译器, 比如 gcc会在编译时指出这一点.

    (6) 为何需要feof?

    FILE *fp;

    fp 指向一个很复杂的数据结构, feof 是通过这个结构中的标志来判断文件是否结束的.

    如果文件用 fgetc 读取, 刚好把最后一个字符读出时, fp 中的EOF标志不会打开,这时

    用feof判断,将会得到文件尚未结束的结论.

    fgetc 返回 -1 时, 我们仍无法确信文件已经结束, 因为可能是读取错误! 这时我们

    需要 feof 和 ferror.

    总结:EOF并不是存在于文件中的,而是一种状态,当读到文件末尾或者读取出错时就会返回这个值来判断文件结束。(即即使读取错误可能也被认为文件结束,所以就需要用feof 和 ferror来判断是不是真的文件结束了)

    当用getchar(c)时,即使c定义成字符型,也可以结束,主要是c与-1比较时,c也会从char转换为整型值。

    写个小程序验证了一下

    #include 

    intmain()

    {

    charc;

    c = -1;

    printf("%x",c);

    return0;

    }#include

    int main()

    {

    char c;

    c = -1;

    printf("%x",c);

    return 0;

    }

    得到的结果为ffffffff,所以c即使定义为char型,读取文件等时还是能正常结束。

    展开全文
  • 一、前言在不同的OS环境下,程序中对应的文件结束符有所不一样,根据《C++ Primer Plus》一书,可知,Windows环境下的文件结束符为:Ctrl + z;Unix/Linux环境下的文件结束符为:Ctrl + d。对于结束符的检测,...

    一、前言

    在不同的OS环境下,程序中对应的文件结束符有所不一样,根据《C++ Primer Plus》一书,可知,Windows环境下的文件结束符为:Ctrl + z;Unix/Linux环境下的文件结束符为:Ctrl + d。

    对于结束符的检测,Windows环境下采用阻塞式的方式进行检查,Unix/Linux则采用非阻塞式方式进行检测。

    二、就Windows环境下的文件结束符的相关分析

    对于Windows而言,由于其采用的是阻塞式的方式进行文件结束符的检测,对于输入者而言,其体验就是:只有键入Enter键才有可能触发检测在此之前是否存在【Ctrl + z】输入的存在。

    如果当前的输入缓存区内有可读的数据,那么就不会检测【Ctrl + z】的存在(有了可读的数据,不认为到了输入流的末尾)。

    【Ctrl + z】产生的不是一个普通的ASCII码值,产生的并不是一个字符,并不能够存放至输入缓冲区。

    综上,可以总结为出,输入流结束的条件为:【Ctrl + z】之前不能有任何字符的输入(【Enter除外】),否则【Ctrl + z】起不到结束输入流的作用。

    另外,如果想在一个程序中不同地方利用cin的各类方式来读取输入流的数据,可以在使用cin语句之前进行缓冲区的清除。

    1 fflush(stdin);2 cin.clear();

    展开全文
  • 在《c++ primer》中有说,在windows中文件结束符为:ctrl+z,在Linux中为:ctrl+D。但是在while(cin>>s)的语句运行中,需要两次的^Z,才会检测到,一直很怀疑是VC版本问题。在网上一找,出这个问题的还是挺多的...
  • 如何输入文件结束符

    千次阅读 2019-05-15 17:48:50
    对于指出文件结束,不同操作系统有不同的约定。在Windows系统中,输入文件结束符的方法敲Ctrl+Z,然后按Enter或Return键。在UNIX系统中,包括Mac OS X系统中,文件结束符输入是用Ctrl+D。 ...
  • 文件结束符EOF

    2019-09-19 04:03:41
    关于文件结束符EOF EOF 是 End Of File 的缩写。 在C语言中,它是在标准库中定义的一个宏。 人们经常误认为EOF 是从文件中读取的一个字符(牢记)。其实,EOF 不是一个字符,它被定义为是 int 类型的一个负数...
  • 在本篇文章里小编给大家分享的是一篇关于python中判断文件结束符的具体方法,有兴趣的朋友们可以参考学习下。
  • python中判断文件结束符的方法:可以使用try except语句块来进行判断。具体使用方法:【try:while True:s = input() except EOFError: pass】。Python中,用try except语句块捕获并处理异常,其基本语法结构如下所示...
  • 操作系统使用不同的值作为文件结束符。 Windows 系统下:键入 control+z——同时键入“ctrl”键和“z”键,来输入文件结束符。 Unix 系统中,包括 Mac OS—X 机器,通常用 control—d ...
  • C++ 文件结束符

    2015-08-11 21:40:40
    控制台输入多个字符串后,输入文件结束符crtl-Z,并未使while循环结束,该如何跳出while循环?   解决方法: 方法1:回车 - ctrl-z - 回车 方法2:改代码,设置自己的文件结束符 String a
  • 文件结束符 有些时候,我们需要输入许多数据,总要有一个符号来表示输入结束,这个符号就是文件结束符 文件结束符是一个标志,它并不是一个字符,在C语言的stdio库中给出了它的定义:define EOF (-1) 所以文件结束...
  • python中判断文件结束符的方法:可以使用try except语句块来进行判断。具体使用方法:【try:while True:s = input() except EOFError: pass】。Python中,用try except语句块捕获并处理异常,其基本语法结构如下所示...
  • 文件结束符EOF .

    2019-07-02 22:55:09
    关于文件结束符EOFEOF 是 End Of File 的缩写。 在C语言中,它是在标准库中定义的一个宏。 人们经常误认为 EOF 是从文件中读取的一个字符(牢记)。其实,EOF 不是一个字符,它被定义为是 int 类型的一个负数(比如...
  • 在windows系统中, 输入文件结束符的方法是敲Ctrl+Z 在UNIX系统中,包括Mac OS X系统中,文件结束符输入是用Ctrl+D
  • linux下文件结束符

    2016-11-10 14:42:00
    linux下文件结束符,我试过了所有的linux,发现其文件的结束符都是以0a即LF结束的,这个是操作系统规定的,windows下是\r\n符结束,希望可以帮助大家. -------------转:来自:...
  • git 过早的文件结束符

    千次阅读 2020-07-15 14:48:07
    git clone <...fatal: 过早的文件结束符(EOF) fatal: index-pack failed 解决办法 如果当前文件夹没有仓库,先建立仓库。 git init git config http.postBuffer 524288000 //设置为500...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,278
精华内容 1,711
关键字:

文件结束符