谁能向我解释未 eclipse 刻的目的?
这是从K&R第4章中创建反向波兰计算器的地方。

我已经运行了该程序,没有调用ungetch,在我的测试中,它仍然可以正常工作。

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

    void ungetch(int c) /* push character back on input */
    {
        if (bufp >= BUFSIZE)
        {
            printf("ungetch: too many characters\n");
        }
        else
        {
            buf[bufp++] = c;
        }

}

(为了清楚起见,我已经删除了getch中的三元运算符。)

最佳答案

我不知道您所指的具体示例(自从阅读K&R以来已有23年的历史了,那是第一版),但是通常在解析时方便地“窥视”下一个字符以查看是否它是您当前正在解析的一部分。例如,如果您要读取数字,则希望继续读取数字,直到遇到非数字为止。 Ungetc允许数字阅读器在不消耗下一个字符的情况下查看下一个字符,以便其他人可以读取它。在格雷格·休吉尔(Greg Hewgill)的“2 3+”示例中,数字读取器将读取3位数字,然后读取加号并知道数字已完成,然后将加号ungetc取消,以便以后可以读取。

关于c - ungetc(或K&R的ungetch)的用途是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/476615/

10-08 22:47