K&;R C编程手册,第4.3节反向波兰计算器示例

K&;R C编程手册,第4.3节反向波兰计算器示例,c,C,当我读到这本书的4.3部分,那就是写一个叫做反向波兰计算器的简单计算器, 我对这一段有点困惑: 当输入类似于: 我们真的关心过多阅读的问题吗? 如果有人能举例说明取消蚀刻方法的必要性,那一定很棒 你的例子是 1 2 - 在这种情况下,getch()将按顺序返回以下字符: '1' ” '2' ” '-' '\n' 这很简单,因为每个数字只包含一个字符,您的程序可以简单地假设它不需要读取更多的字符,或者在空白处完成数字的读取 但是如果你的意见是正确的 23 314+11*42/ 您的同

当我读到这本书的4.3部分,那就是写一个叫做反向波兰计算器的简单计算器, 我对这一段有点困惑:

当输入类似于:

我们真的关心过多阅读的问题吗? 如果有人能举例说明取消蚀刻方法的必要性,那一定很棒

你的例子是

1 2 -
在这种情况下,
getch()
将按顺序返回以下字符:

  • '1'
  • '2'
  • '-'
  • '\n'
这很简单,因为每个数字只包含一个字符,您的程序可以简单地假设它不需要读取更多的字符,或者在空白处完成数字的读取

但是如果你的意见是正确的

23 314+11*42/
您的同一程序如何知道数字何时完成

嗯,它需要读取最后一个数字后面的字符。由于下一个字符可能对下面的操作很重要,因此需要将其“推回”到输入中。这就是
ungetch()
所做的


例如,在收集了
'3'
'1'
'4'
之后,它需要读取
'+'
,以发现该数字是完整的
'4'
。但是必须保留
'+'
,以便下次调用
getop()
返回
'+'

请考虑跳过空格函数。你会一直读到有别的东西出现。然后读取的字符被放回输入流中。本例中的标记不需要用空格分隔,因此,例如:
12+
如果您要求标记用空格分隔,这仍然是一个示例,因为这应该是一个错误。不要对代码使用屏幕截图。@Devlus,我下次会键入代码,谢谢@保罗·汉金,你说得对!对于这个例子,我的例子太简单了,完全跳过了很多情况!太多了!,突然我意识到这是绝对必要的,我的例子就像你说的那样简单,所以它不会影响结果,但是有了你的例子,它消除了我的困惑!