只是有点困惑,我希望有人能澄清-这个问题问:“我们的getch和ungetch不能正确处理一个推回EOF。决定他们的属性应该是什么,如果一个EOF被推后,然后执行您的设计”。
对于代码本身,EOF被推回,用getch()重新获取,这会导致一个循环,如:
while ((c = getch()) != EOF)
putchar(c);若要在从缓冲区中遇到它时终止。我看不出这种行为是如何不正确的。当然,由于EOF理论上(大部分)只会遇到一次,如果它被推回,然后以这种方式从缓冲区读取,这真的不重要吗?我希望有人能为我澄清这个问题的目的--我知道大多数解决方案都涉及编程ungetch()来忽略EOF,我只是不明白问题的意义。
我肯定有一个,因为丹尼斯·里奇和布莱恩·克尼根比我小的时候聪明多了--只是希望有人能指出这一点。谢谢:-)
你好,菲尔
发布于 2013-09-16 01:09:28
根据本书第19页的内容,buf的定义是char buf[BUFSIZE];:
我们必须声明c是一个大到足以保存getchar返回的任何值的类型。我们不能使用char,因为c必须足够大,除任何可能的字符外,还可以容纳EOF。因此,我们使用int。
然后我们得到答案:
int buf[BUFSIZE];https://stackoverflow.com/questions/18818349
复制相似问题