提问人:Carson Myers 提问时间:5/20/2009 最后编辑:DeduplicatorCarson Myers 更新时间:1/23/2015 访问量:1402
“The C Programming Language”中的这段代码是如何工作的?
how does this code from "The C Programming Language" work?
问:
我正在阅读“C 编程语言(第 2 版)”,在开头,它有这样的例子:
while((c = getchar()) != EOF)
if(c == '\n'){
++n1;
我可以看到这在从文件中读取时是如何工作的,并且我理解这种语法......但这只是从控制台读取 - 从控制台输入字符时如何发出文件结束的信号?我正在使用 Windows XP...MinGW编译器... 无论如何,这本书是为 waaay 早期的系统写的,带有 EOF 按钮之类的东西吗?
更新
好吧,我还有一个问题,这与文件结尾在 Windows 下的工作方式有关。
如果我只是 ,那么我可以继续输入字符,直到我通过 ^Z 发出 EOF 信号。但是,我必须写一个换行符,然后按^Z,然后再写一个换行符......为什么它必须在自己的生产线上?while(getchar()!=EOF);
答:
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 实现的工作方式。
评论
c
int
char