gpt4 book ai didi

声明数组的说明

转载 作者:太空宇宙 更新时间:2023-11-03 23:46:52 24 4
gpt4 key购买 nike

int getch(void);
void ungetch(int);
/* getop: get next character or numeric operand */
int getop(char s[])
{
int i, c;
while ((s[0] = c = getch()) == ' ' || c == '\t')
;
s[1] = '\0';
if (!isdigit(c) && c != '.')
return c; /* not a number */
i = 0;
if (isdigit(c)) /* collect integer part */
while (isdigit(s[++i] = c = getch()))
;
if (c == '.') /* collect fraction part */
while (isdigit(s[++i] = c = getch()))
;
s[i] = '\0';
if (c != EOF)
ungetch(c);
return NUMBER;
}
#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;
}

以上代码来自K&R。

在上面的代码中,我看到数组 buf[] 用于最大索引 1,但它被定义为具有 100 的大小。定义是否正确或有一个大量内存浪费?

我几乎认为这是一种糟糕的编程风格。

我只要求 getop() func,而不是一般的 getch() 和 ungetch()

我是初学者,如果我的问题无效,我很抱歉:P

最佳答案

不管“编程风格”,这些都是没有任何东西可以运行的函数(即 main 函数)。因此,您无法说出这些将如何使用,但您可以了解它们如何使用 .现在,假设在循环中调用了 ungetch,根本没有调用 getch。在每次迭代中,bufp 将增长 1,buf 将慢慢填满,直到 bufp 等于 BUFSIZE 并且将打印“太多字符”。接下来,如果 getch 在循环中调用 AFTER buf 已满,则每次迭代 bufp 都会收缩 1直到 buf 为空,getchar 将用于下一个字符。

关于声明数组的说明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30432576/

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