stdin中的文件结束

Mcs*_*Mcs 12 c console stdin eof

关于这个的问题已经在C中被问到 文件结尾(EOF), 但它仍然没有完全解决我的问题.

EOF在任何数据流中都没有意义stdin,例如,如果我有一些data.txt文件,fgetc()将读取所有字符并返回到文件末尾并返回-1.

我不明白的是EOFin 的概念stdin.如果我使用getchar()它,它将等待我输入一些东西,所以如果没有写入,文件结束,(EOF)不会自动返回?

因此,它是只有用户可以调用EOFstdinCtrl+ Z?如果是这样,那么EOFin的一些用途是stdin什么?我想它会告诉程序继续读取,直到用户调用文件结束?是这个吗?

谢谢

Iha*_*imi 16

所以,如果没有写,文件结束,(EOF)不会自动返回?

不,它不应该由用户发送.

因此,它是只有用户可以调用EOFstdinCtrl+ Z

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

如果是这样,那么EOFin的一些用途是stdin什么?我想它会告诉程序继续读取,直到用户用户调用文件结尾?是这个吗?

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

EOF不一定-1是一个宏,你应该总是用它来测试的EOF指标.更重要的EOF是,它不是一个字符,它是一个特殊值,表示设置了E nd O f F ile指示符.

而且,getchar()相当于fgetc(stdin).


Sou*_*osh 5

在linux bash中,如果你按CTRL+ D,它会生成EOF.

在Windows中,等效于CTRL+Z

所以,不,如果没有写入终端,那就不会EOF自动生成.在扫描功能处于等待状态,那么.因此,在没有任何其他输入的情况下,在等待状态下,如果按下CTRL+ D,则按键被[终端驱动程序] 翻译EOF.注意

通常情况下,一旦你在某个值键和ENTER键,scannning功能开始扫描.为了养活输入用于生产EOF,则需要按下CTRL+ D.

相关阅读:请reaed的维基条目EOF

注意:感谢Drew先生的澄清.