标准输入中的文件结尾

End of File in stdin

这里有人问过这个问题 End of File (EOF) in C 但还是没有完全解决我的问题

EOF 在任何不是 stdin 的数据流中对我都有意义,例如,如果我有一些 data.txt 文件,fgetc() 将读取所有字符和到达文件末尾 return -1.

我不明白的是stdinEOF的概念。如果我使用 getchar(),它会等我输入一些东西,所以如果没有写入任何内容,文件结尾 (EOF) 不会自动 returned 吗?

那么是不是只有用户可以通过按Ctrl+Zstdin中调用EOF ? 如果是这样,那么 stdinEOF 的一些用途是什么?我猜它告诉程序继续阅读,直到用户调用文件结尾?是这个吗?

谢谢

在linuxbash中,如果按CTRL+D,会生成EOF.

在Windows中相当于CTRL+Z

所以,不,如果没有向终端写入,那不会自动生成EOF。此时扫描函数处于等待状态。因此,在没有任何其他输入的情况下,在等待状态下,如果 CTRL+D 被按下,则按键被 translated [由终端驱动]改为EOF.

通常,一旦您输入一些值并按下 ENTER 键,scannning 函数就会开始扫描。要输入 用于生成EOF 的输入,您需要按CTRL+D

相关:请阅读 wiki entry for EOF

注:感谢德鲁先生的澄清。

so if there is NOTHING written, End of File, (EOF) is not returned automatically?

不,不是。应该由用户发送。

So is it that only the user can invoke EOF in stdin by pressing Ctrl+Z?

是的,您可以使用可以在控制台中输入的特殊组合键为 stdin 设置 EOF 指示器,对于 linux 控制台,即 Ctrl +D 而对于 windows 它是 Ctrl+Z.

If so then what are some of the uses of EOF in stdin? I guess it tells the program to continue reading until the user user invokes end of file? is this it?

它的使用取决于你是否明确地指示用户输入EOF,例如,我认为python控制台会告诉你类似Press Ctrl+D or type quit() to exit的东西。

并且 EOF 不一定 -1 它是一个宏,您应该始终使用它来测试 EOF 指标。更重要的是 EOF 不是字符,它是一个特殊值,表示 End Of F文件指示器已设置。

此外,getchar() 等同于 fgetc(stdin)

stdin是一个流,直到用户按下一些键,数据才可用。磁盘上的文件已经有(固定数量的)内容。

stdin 读取时,如果 getchar() 不等待用户输入内容,则程序将始终获得 EOF。这将使 stdin 无法用作输入文件。

因为getchar() 等待用户输入一些东西,所以没有办法发出输入完成的信号;这就是为什么操作系统提供组合键,当它们在控制台上按下时具有特殊含义。

Windows 使用 CtrlZ 类 Unix 操作系统(包括 OSX)使用 CtrlD 用于此目的。

文件stdin并不总是用户在键盘上输入。如果您将输入重定向到您的程序,它可以只是一个普通文件。

program.exe <input-from-file.txt

可能会让您感到困惑的是,不向控制台输入 window 并不表示输入结束。但反过来想想:如果控制台不为用户做一些缓冲,用户怎么能响应得如此之快以至于程序不会在它之前终止呢?按 Enter 后,用户说这是一行输入。换句话说:控制台 window 中的程序 运行 总是等待下一个输入的到来。

大多数程序都定义了一个特殊的短语来结束控制台会话。你可能知道 exit.