在这段来自 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 doesmain
.
上述程序在遇到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/