代码之家  ›  专栏  ›  技术社区  ›  gunjanpatait

以下代码中的EOF是什么?

  •  3
  • gunjanpatait  · 技术社区  · 7 年前

    我在读C编程语言的书,在下面给出的代码中,我不太明白我们将如何得到一个EOF在这里我也不知道什么是EOF它是字符、整数还是条件如果这是一个条件,那么请解释谢谢您。

    #include <stdio.h>
    int main(int argc, char *argv[]){
    int c;
    while((c = getchar()) != EOF){
      printf("%d", c != EOF);
      putchar(c);
    }
    printf("\n%d\n", c != EOF);
    }
    
    3 回复  |  直到 7 年前
        1
  •  5
  •   Steve Summit    7 年前

    这个 getchar 函数可以返回系统中可以表示的任何可能字符, 另外一个特殊的“带外”返回值,表示不再返回字符此值由符号宏标识符引用 EOF . 在后面某处 <stdio.h> 通常有这样的定义

    #define EOF (-1)
    

    这个值不一定是-1,但这符合我们的目的(我们不需要知道或关心实际价值是什么,因为我们总是指 EOF公司 ,将我们与实际值隔离。)

    不管什么价值 EOF公司 有,它保证不与任何实际字符相同所以如果 获取字符 返回除 EOF公司 ,它是一个已被读取的实际字符但如果它回来了 EOF公司 ,这表示输入流已到达文件结尾,没有要读取的字符。

    所以 EOF公司 绝对是 一个角色它是一个整数,其值与任何 char . 我不会称之为“条件”,尽管您可以使用类似于

    if(c == EOF)
    

    if(c != EOF)
    

    我想说那些表达 c == EOF c != EOF 是条件。

    这尤其令人困惑,因为通常有一个特殊的字符,您可以在键盘上键入,以生成文件结束指示在Windows上是control-Z;在Unix和其他系统上是control-D 意思是 EOF公司 是Windows系统上的control-Z还是Unix系统上的control-D这些字符由终端驱动程序处理,并转换为指示,在经过几个额外的处理和解释级别后,会导致 获取字符 归来 EOF公司 . 但有一种方法可以证明 EOF公司 control-Z或control-D是在使用 获取字符 getc 从文件中读取 EOF公司 即使在这种情况下没有人在键盘上键入控制字符,也在文件末尾显示。

    最后,这个讨论提醒我们使用 int 用于携带由返回的值的变量 获取字符 . 你引用的代码正确声明了

    int c;
    

    然后使用变量 c 保存 获取字符 . 为什么使用 内景 在这里?自从 获取字符 返回字符,并且自 c类 是一个角色,声明不是更有意义吗

    char c;
    

    那个 似乎 好像这是有道理的,但实际上是完全错误的类型 烧焦 可以保存系统可以表示的任何字符但请记住, 获取字符 可以返回任何字符值, 这个 EOF公司 价值如果你分配 获取字符 的返回值 烧焦 ,您最终会“刮掉”EOF指示,不小心将其映射到实际字符值接下来要做的是将实际字符(通常是ÿ)映射到 EOF公司 当你读了一本书,或者你在地图上 EOF公司 对于一个实际的字符,所以永远不要检测到它,所以进入一个无限循环,而不是在文件末尾停止。

        2
  •  2
  •   Eduardo Soares    7 年前

    EOF表示文件结束读取输入流(文件、键盘等)时,流结束时返回EOFEOF通常由int-1表示

        3
  •  -1
  •   PRINCEKUMAR PATEL    7 年前

    EOF是条件现在让我们举个例子。 你有一个.txt文件,其中你已经写了50行,但你不知道有多少字符在这个.txt文件现在您想将.txt文件中的所有字符打印到c语言程序中,但仍然不知道其中有多少字符为此,您必须使用EOF(意味着文件结束),这是for循环或while循环的条件这个循环将继续到.txt文件的最后一个字符。