这个来自“C程序设计语言”的代码如何工作?

时间:2009-05-20 08:29:31

标签: c eof kernighan-and-ritchie

我正在阅读“C编程语言”(第2版),并且在开头附近,它有这样的例子:

while((c = getchar()) != EOF)
    if(c == '\n'){
        ++n1;

我可以看到这在读取文件时如何工作,我理解这种语法......但这只是从控制台读取 - 当从控制台输入字符时,如何发出文件结束信号?我正在使用Windows XP ... MinGW编译器...... 无论如何,这本书是为waaay早期系统而写的,就像EOF按钮一样?

更新

好吧,我还有一个问题,那就是文件结尾在Windows下的运作方式。

如果我只是while(getchar()!=EOF);,那么我可以继续输入字符,直到我通过^ Z发出EOF信号。但是,我必须写一个换行符,然后点击^ Z,然后点击另一个换行符......为什么它必须在它自己的行上?

4 个答案:

答案 0 :(得分:7)

Windows使用Ctrl-Z表示EOF,而UNIX使用Ctrl-D。请参阅http://bytes.com/groups/c/217873-eof-windows,以及出色的图书选择。 :)

答案 1 :(得分:4)

^ Z是EOF。

答案 2 :(得分:3)

已经给出了正确的答案,但典型的用法是将文件重定向到标准输出:

program.exe < samplefile.txt

samplefile.txt被“写入”标准输出,program.exe从标准输出读取此信息,直到达到EOF。

答案 3 :(得分:1)

关于^ Z的问题,它的行为是因为它不是真正的字符,它是从操作系统到C输入系统的信号。因此,它高度依赖于OS和C输入系统缓冲之间的交互。对于Windows和您的特定C实现来说,这就是说明它的工作方式。