标准输入中的文件结尾
End of File in stdin
这里有人问过这个问题
End of File (EOF) in C
但还是没有完全解决我的问题
EOF
在任何不是 stdin
的数据流中对我都有意义,例如,如果我有一些 data.txt
文件,fgetc()
将读取所有字符和到达文件末尾 return -1
.
我不明白的是stdin
中EOF
的概念。如果我使用 getchar()
,它会等我输入一些东西,所以如果没有写入任何内容,文件结尾 (EOF
) 不会自动 returned 吗?
那么是不是只有用户可以通过按Ctrl+Z在stdin
中调用EOF
?
如果是这样,那么 stdin
中 EOF
的一些用途是什么?我猜它告诉程序继续阅读,直到用户调用文件结尾?是这个吗?
谢谢
在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
.
这里有人问过这个问题 End of File (EOF) in C 但还是没有完全解决我的问题
EOF
在任何不是 stdin
的数据流中对我都有意义,例如,如果我有一些 data.txt
文件,fgetc()
将读取所有字符和到达文件末尾 return -1
.
我不明白的是stdin
中EOF
的概念。如果我使用 getchar()
,它会等我输入一些东西,所以如果没有写入任何内容,文件结尾 (EOF
) 不会自动 returned 吗?
那么是不是只有用户可以通过按Ctrl+Z在stdin
中调用EOF
?
如果是这样,那么 stdin
中 EOF
的一些用途是什么?我猜它告诉程序继续阅读,直到用户调用文件结尾?是这个吗?
谢谢
在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
instdin
by pressing Ctrl+Z?
是的,您可以使用可以在控制台中输入的特殊组合键为 stdin
设置 EOF
指示器,对于 linux 控制台,即 Ctrl +D 而对于 windows 它是 Ctrl+Z.
If so then what are some of the uses of
EOF
instdin
? 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
.