“The C Programming Language”中的这段代码是如何工作的?

how does this code from "The C Programming Language" work?

提问人:Carson Myers 提问时间:5/20/2009 最后编辑:DeduplicatorCarson Myers 更新时间:1/23/2015 访问量:1402

问:

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

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

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

更新

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

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

C Eof Kernighan-and-Ritchie

评论

0赞 pmg 10/19/2009
请确保声明为 ,而不是 !cintchar

答:

4赞 Dan Byström 5/20/2009 #1

^Z 是 EOF。

7赞 Matthew Flaschen 5/20/2009 #2

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

评论

0赞 Carson Myers 5/20/2009
谢谢!哈哈,我要为我的生日买它,但我等不及了,所以我下载了它并偷看了一眼。但是 OCR 读了一些单词和字母,所以读错了,有些页面无法加载,所以这不是一个 100% 很棒的体验,我觉得我错过了很多信息。
0赞 Carson Myers 5/20/2009
我必须等待大约一个月,仅此而已。
3赞 Dirk Vollmar 5/20/2009 #3

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

program.exe < samplefile.txt

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

评论

1赞 5/20/2009
需要明确的是 - 文本文件的“文件中”没有 EOF - 它由操作系统在读取文件中文本的末尾时提供。
0赞 Dirk Vollmar 5/20/2009
@Neil:谢谢你的澄清,你是完全正确的。为了避免误解,我更新了措辞。
1赞 anon 5/20/2009 #4

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