End of File in stdin

Mcs picture Mcs · Jan 29, 2015 · Viewed 28.2k times · Source

A question about this has been asked here End of File (EOF) in C but it still doesn't completely solve my problem.

EOF makes sense to me in any datastream which is not stdin, for example if I have some data.txt file, fgetc() will read all the chars and come to the end of file and return -1.

What I don't understand is the concept of EOF in stdin. If I use getchar(), it will wait for me to enter something, 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? 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 invokes end of file? is this it?

Thank you

Answer

Iharob Al Asimi picture Iharob Al Asimi · Jan 29, 2015

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

No, it's not. It should be sent by the user.

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

Yes, you can set the EOF indicator for stdin with a special key combination you can input in the console, for linux console that is Ctrl+D and for windows it's 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?

The use of it depends on whether you instruct the user to input the EOF explicitly or not, for example, I think python console will tell you something like Press Ctrl+D or type quit() to exit.

And EOF is not necessarily -1 it's a macro and you should always use it to test for the EOF indicator. And more importantly EOF is not a character, it's a special value that indicates that the End Of File indicator is set.

Also, getchar() is equivalent to fgetc(stdin).