关于不从任何外部文件读取数据时 EOF 工作的说明

标签 c

在这段来自 K&R 的代码中

#include <stdio.h>
main()
{
   int c;
   while ((c = getchar()) != EOF)
     putchar(c);
}

有人提到

When the end of the input is finally reached, the while terminates and so does main.

上述程序在遇到EOF时终止,但即使流中的数据结束,也不满足EOF条件并继续循环。

由于没有文件可以读取文本,我相信EOF 必须通过按CTRL 从外部发出信号+SHIFT+D - 我是否正确认为它应该在外部(手动)发出信号并且即使流中的数据完成也不会自行发生?书上说它会在输入结束时终止。

注意:Virtual Box 上使用的操作系统是centos,因此命令也需要SHIFT

最佳答案

EOF(“文件结尾”)实际上与"file"没有任何方向相关性 - 它不是出现在文件末尾的东西。它只是一种状态,表示“没有更多可从此流中读取”并且通常由许多 I/O 函数返回。

因此,无论您是从文件、管道还是任何其他 I/O 设备读取数据,其 (EOF) 的含义都是相同的:从该流中没有更多内容可读取。

当您通过 stdin 流从终端读取时,没有这样的 EOF 状态(按回车键不是“文件结束”条件 - 它是行尾并且会输入 \n char 到你的程序)因为你可以继续输入数据。因此,您可以使用键序列 CTRL + D(或 CTRL + Z)生成 EOF windows) 在类 unix 系统上。因此,要回答您的问题,是的,您必须在 (K&R) 程序中自己生成它。

关于关于不从任何外部文件读取数据时 EOF 工作的说明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49437201/

相关文章:

c - 文件指针在 while 循环的第二次迭代中变为 NULL

c - 段故障 SPARC 程序集

objective-c - Objective-c 中的 C 二维数组

c - 用 C 编写的快速排序中的赛车条件与 OpenMP 并行

C宏返回变量类型

c++ - 在没有文件 i/o 的情况下检索可重入词法分析的结果

c - 旅行推销员的错误代码,即寻找具有最小图表成本的循环

c++ - 什么是 uint_fast32_t,为什么要使用它来代替常规的 int 和 uint32_t?

编译具有 MPI 支持的 Valgrind

c - Xcode c printf()中输出中的倒置问号