1

我正在阅读“The C Programming Language (2nd ed.)”,在刚开始的时候,它有这样的例子:

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

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

更新

好吧,我还有一个问题,这与文件结尾在 Windows 下的工作方式有关。

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

4

4 回答 4

7

Windows 使用 Ctrl-Z 表示 EOF,而 UNIX 使用 Ctrl-D。请参阅http://bytes.com/groups/c/217873-eof-windows和优秀的书籍选择。:)

于 2009-05-20T08:31:03.657 回答
4

^Z 是 EOF。

于 2009-05-20T08:30:28.133 回答
3

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

program.exe < samplefile.txt

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

于 2009-05-20T08:40:25.917 回答
1

关于你在 ^Z 上的问题,它的行为是这样的,因为它不是一个真正的字符,它是从操作系统到 C 输入系统的信号。因此,它高度依赖于操作系统和 C 输入系统缓冲之间的交互。这是一种奇特的说法,它只是事情的工作方式,适用于 Windows 和您的特定 C 实现。

于 2009-05-20T09:10:25.433 回答