6

只是有点困惑,我希望有人能澄清一下——这个问题问:“我们的 getch 和 ungetch 没有正确处理推回的 EOF。决定如果 EOF 被推回,它们的属性应该是什么,然后实现你的设计”。

在代码原样的情况下,一个 EOF 被推回,用 getch() 重新获取,这会导致一个循环,例如:

while ((c = getch()) != EOF)
    putchar(c);

当它从缓冲区中遇到时终止。我看不出这种行为是如何不正确的。当然,理论上(大多数情况下)EOF只会遇到一次,如果它被推回然后以这种方式从缓冲区中读取,那真的没关系吗?我希望有人能为我澄清这个问题的目的 - 我知道大多数解决方案都涉及编程 ungetch() 以忽略 EOF,我只是不明白这一点。

我确信有一个,因为丹尼斯·里奇和布赖恩·克尼汉比小时候的我聪明得多——只是希望有人能指出这一点。谢谢 :-)

问候,菲尔

4

1 回答 1

5

的定义bufchar buf[BUFSIZE];,根据本书第19页的内容:

我们必须将 c 声明为一个足够大的类型来保存 getchar 返回的任何值。我们不能使用 char,因为除了任何可能的 char 之外,c 必须足够大以容纳 EOF。因此我们使用int。

然后我们得到答案:

int buf[BUFSIZE];
于 2013-09-16T01:09:28.137 回答