此代码来自 K&R。我已经读了好几遍了,但它似乎仍然逃脱了我的掌握。
#define BUFSIZE 100
char buf[BUFSIZE];
int bufp = 0;
int getch(void)
{
return(bufp>0)?buf[--bufp]:getchar();
}
int ungetch(int c)
{
if(bufp>=BUFSIZE)
printf("too many characters");
else buf[bufp++]=c;
}
正如 K&R 所说,这两个函数的目的是防止程序读取过多的输入。即,如果没有此代码,函数可能无法确定它已读取足够的数据,而无需先读取太多数据。但我不明白它是如何工作的。
例如,考虑 getch()。据我所知,这是它所采取的步骤:
- 检查 bufp 是否大于 0。
- 如果是,则返回 buf[--bufp] 的 char 值。
- 否则返回 getchar()。
我想问一个更具体的问题,但我真的不知道这段代码是如何实现它打算实现的,所以我的问题是:(a)目的和(b)这段代码的推理是什么?
提前致谢。
注意:对于任何 K&R 粉丝,可以在第 79 页找到此代码(我想取决于您的版本)