gpt4 book ai didi

根据 K&R,无法理解 C 中 getint() 的工作

转载 作者:太空狗 更新时间:2023-10-29 15:30:07 27 4
gpt4 key购买 nike

两天来我一直试图理解这段代码的工作原理,但就是无法理解它。

我怀疑函数的工作原理。请不要考虑缺少 main 或其他任何内容。

我无法理解的是,如果 getint() 使用 getchar() 获取输入,它将执行以下操作:

  1. 假设 bufp=0。该函数将调用 getch(),这意味着 c=a。 (只是一个随机字符)
  2. 下一步使用 ungetch(a),这意味着 buf[0]=a 和 bufp=1。
  3. 现在这是我无法得到它的地方。下一次调用 getint() 时,结果是 c=buf[--bufp]=a 和 bufp=0。
  4. 这将再次取消获取(a),这将导致函数无处可去!

我不知道我在这里是否有一些主要概念错误,但我就是想不通。 :(

/* getint:  get next integer from input into *pn */

int getint(int *pn)
{
int c, sign;

while (isspace(c = getch())) /* skip white space */
;

if (!isdigit(c) && c != EOF && c != '+' && c != '-') {
ungetch(c); /* it is not a number */
return 0;
}
sign = (c == '-') ? -1 : 1;
if (c == '+' || c == '-')
c = getch();
for (*pn = 0; isdigit(c); c = getch())
*pn = 10 * *pn + (c - '0');
*pn *= sign;
if (c != EOF)
ungetch(c);
return c;
}

#define BUFSIZE 100

char buf[BUFSIZE]; /* buffer for ungetch */
int bufp = 0; /* next free position in buf */

int getch(void) /* get a (possibly pushed-back) character */
{
return (bufp > 0) ? buf[--bufp] : getchar();
}

void ungetch(int c) /* push character back on input */
{
if(bufp >= BUFSIZE)
printf(" ungetch too many characters\n");

else
buf[bufp++] = c;
}

最佳答案

getint() 函数仅从输入中读取数字。如果它在开头得到一个不是数字或 + - 符号的字符,它将调用 ungetch() 将该字符推回输入缓冲区,以便它可以被其他函数调用读取。 getint() 将继续返回 0,直到您通过自己调用 getch() 从输入缓冲区中删除非数字字符。

关于根据 K&R,无法理解 C 中 getint() 的工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10170358/

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