gpt4 book ai didi

c - 请解释这个示例 C 代码

转载 作者:太空狗 更新时间:2023-10-29 14:54:19 25 4
gpt4 key购买 nike

此代码来自 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()。据我所知,这是它采取的步骤:

  1. 检查 bufp 是否大于 0。
  2. 如果是则返回 buf[--bufp] 的字符值。
  3. 否则返回 getchar()。

我想问一个更具体的问题,但我真的不知道这段代码是如何实现它想要实现的目标的,所以我的问题是:这段代码的 (a) 目的和 (b) 推理是什么?

提前致谢。

注意:对于任何 K&R 粉丝,可以在第 79 页找到此代码(我想这取决于您的版本)

最佳答案

(a) 这段代码的目的是能够读取一个字符,然后在你不小心读取了太多字符时“取消读取”它(最大 100 字符为“未读”)。这在具有前瞻性的解析器中很有用。

(b) getchbuf 读取如果它有内容,由 bufp>0 指示。如果 buf 为空,则调用 getchar。请注意,它使用 buf 作为堆栈:它从右到左读取它。

ungetch 检查堆栈是否未满后,将一个字符压入堆栈 buf

关于c - 请解释这个示例 C 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8505716/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com