当前位置:  开发笔记 > 编程语言 > 正文

ungetc(或从K&R取消工作)的目的是什么?

如何解决《ungetc(或从K&R取消工作)的目的是什么?》经验,为你挑选了2个好方法。

任何人都可以向我解释ungetch的目的吗?这是来自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中的三元运算符以使其更清晰.)



1> David Norman..:

我不知道你所指的具体例子(自从我读K&R以来已有23年,这是第一版.),但通常在解析它时,可以方便地"查看"下一个字符,看看是否它是您当前正在解析的内容的一部分.例如,如果您正在读取一个数字,您希望继续读数字,直到您达到非数字.Ungetc允许数字阅读器查看下一个字符而不消耗它,以便其他人可以阅读它.在Greg Hewgill的"2 3+"的例子中,数字阅读器将读取3位数字,然后读取加号并知道数字已完成,然后取消加号,以便稍后阅读.


是的,peek相当于getc后跟ungetc.

2> Greg Hewgill..:

尝试运行程序,运算符周围没有空格.我不记得该示例的格式,我没有K&R方便,但不是使用"2 3 +"尝试"2 3+".在ungetch()解析数字时可能是使用,直到它得到的东西,是一个非数字的号码分析器将读取的数字.如果非数字是一个空格,那么下一个getch()将读取+并且一切都很好.但是,如果下一个非数字是a +,则需要将其推回输入流,以便主读取循环可以再次找到它.

希望我能正确记住这个例子.

推荐阅读
郑小蒜9299_941611_G
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有