《C语言程序设计:现代方法》第10章项目6代码逻辑疑问
解惑:栈式计算器中
else if (input == '+') push(operandA + operandB);的工作逻辑 首先得明确这段代码的上下文:它属于一个基于栈实现的逆波兰表达式计算器,核心规则是遇到数字就压入栈,遇到运算符就弹出栈顶两个数计算,再把结果压回栈。
当你输入75+=这个表达式时,咱们拆解成逐个字符的处理流程,就能看懂这行代码的作用了:
- 第一步读入
'7':程序判断这是数字,直接压入栈,此时栈内容为[7] - 第二步读入
'5':同样是数字,压入栈,栈内容变为[7, 5] - 第三步读入
'+':触发你疑惑的这行代码:- 程序先从栈顶弹出第一个数,赋值给
operandB(也就是5——因为栈是后进先出,最后压入的数先出来) - 再弹出第二个数,赋值给
operandA(也就是7,这是更早压入的数) - 计算
operandA + operandB,也就是7 + 5 = 12,然后把结果12压回栈,此时栈内容变为[12]
- 程序先从栈顶弹出第一个数,赋值给
- 第四步读入
'=':这是计算器的输出触发符,程序会弹出栈顶的12并显示结果
你可能会疑惑为什么是operandA + operandB而不是反过来?这是因为栈的后进先出特性:当你输入7再输入5,5在栈顶,先弹出的是右操作数,后弹出的是左操作数,这样加法顺序才符合咱们输入的7+5逻辑。如果换成减法、除法这类有顺序的运算符,这个写法就更关键了——比如输入75-,必须计算7-5而非5-7,operandA - operandB的顺序就能保证结果正确。
内容的提问来源于stack exchange,提问作者pickle323
相关产品推荐
相关产品推荐

